Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola! desde ya gracias por los aportes que puedan hacer.
Bueno, tengo 3 tablas:
Ventas: Precio, Cantidad, etc (Desde Base de Datos)
Clientes: IdCliente, Nombre, etc (Desde Base de Datos)
Clasificacion: Cod, G (Inline)
La tabla Clasificacion (creada desde INLINE )tiene 2 campos tal como muestro mas arriba donde le asigno un código (Cod) y una calificación (G) que puede ser G1, G2, G3, G4 o G5 que depende de la cantidad de productos que compre el cliente. Entonces necesito el campo de IdCliente desde la tabla Clientes para identificar a los cllientes y Cantidad de la tabla Ventas para establecer los rangos de cantidades de ventas. Como Hago?
Estas son las tablas:
Ventas:
LOAD
Cantidad,
Precio
SQL SELECT *
FROM EMPRESA.dbo.VENTAS;
Clientes:
LOAD IdCliente,
Nombre
SQL SELECT *
FROM EMPRESA.dbo.CLIENTES;
Clasificacion:
LOAD * INLINE [
Cod, G
1, G1,
2, G2,
3, G3,
4, G4,
5, G5,
];
Ejemplo de lo que quiero lograr:
si un cliente compra en un mes 1 producto entonces lo clasifico como G1
si un cliente compra en un mes de 2 a 3 productos entonces lo clasifico como G2
si un cliente compra en un mes de 4 a 5 productos entonces lo clasifico como G3
si un cliente compra en un mes de 6 a 7 productos entonces lo clasifico como G4
si un cliente compra en un mes mas de 7 productos entonces lo clasifico como G5
Después quiero hacer un gráfico de tarta con G1, G2, G3, G4 y G5 y ver cuantos cliente tengo en cada G.
Hola Walterlh,
Supongo que en las tablas que muestras hay algún campo más que una las ventas con los clientes, no?
Sino no veo cómo podrías hacerlo.
Suponiendo que en la tabla Ventas tienes el código de cliente, podrías hacer algo como:
Ventas_Aux:
LOAD
IdCliente,
Sum(Cantidad) as TotalCliente,
If(Sum(Cantidad)>7
, 'G5', If(Sum(Cantidad)>=6 Or Sum(Cantidad)<=7
, 'G4', If(Sum(Cantidad)>=4 Or Sum(Cantidad)<=5
, 'G3', If(Sum(Cantidad)>=2 Or Sum(Cantidad)<=3
, 'G2', If(Sum(Cantidad)=1, 'G1'))))) as ClasificaciónCliente
Resident Ventas
Group By IdCliente;
Un saludo,
Hola Walterlh,
Yo estaba pensando en algo parecido a lo que te ha propuesto Sonia. La idea sería clasificarlo en el Script para simplificar las expresiones de tus gráficos de tarta.
Te propongo lo siguiente:
Ventas2:
LOAD
Cantidad,
Precio,
Autonumber(IdCliente & '-' & Mes) as IdClienteMes
SQL SELECT *
FROM EMPRESA.dbo.VENTAS;
LEFT JOIN(Ventas2)
LOAD IdClienteMes
, Count(IdVenta) as Ventas
Resident Ventas2
Order By IdCliente, Mes;
Ventas:
LOAD *,
if(Ventas <= 1, 'G1',
if(Ventas <= 3, 'G2',
if(Ventas <= 5, 'G3',
if(Ventas <= 6, 'G4',
'G5')))) as Grupo
Resident Ventas2;
DROP Table Ventas2;
DROP Field IdClienteMes;
Donde también asumo que en la tabla de las ventas, tienes el IdCliente, el Mes y un identificador único de la venta para poderla contar (nº de la factura o similar).
Con el left join consigo asignar la cantidad de ventas que ha hecho cada cliente en cada mes, y con la última tabla, clasifico esas ventas conforme a tus necesidades. En este ejemplo, no haría falta la tabla INLINE que has montado.
Un saludo y espero haberte sido de ayuda.
Eso es un problema porque para ventas tengo 2 tablas en la base de datos. Ventas y Detalle_Ventas.
en Ventas tengo el IdCliente y en Detalle_Ventas tengo la cantidad.
intenté:
Categorias:
load IdCliente as CodCl // en la tabla clientes puse "IdCliente as CodCl" porque ya tiene muchas relaciones
Resident Clientes;
Left Join (Categorias)
LOAD
If(Cantidad >0 and Cantidad<=450 ,'G5',
If(Cantidad >450 and Cantidad<=900 ,'G4',
If(Cantidad >900 and Cantidad<=1800,'G3',
If(Cantidad >1800 and Cantidad<=4000,'G2',
If(Cantidad >4000 ,'G1'))))) as CategoríaCl
Resident Detalle_Ventas;
// No usé Sum(Cantidad) porque lo intenté y me sumó todo y solo me trajo G1
al intentar ésto no funcionó.
Hola de nuevo,
Entonces, si en la cabecera de las ventas tienes el IdCliente, no queda otra que unirla con sus detalles. Me imagino que habrá un campo clave que los relacione, como puede ser IdVenta. Te he adaptado mi propuesta, que te había comentado más abajo, a esta nueva aclaración que nos has dado.
Ventas2:
LOAD IdVenta
, Autonumber(IdCliente & '-' & Mes) as IdClienteMes
SQL SELECT *
FROM EMPRESA.dbo.VENTAS;
Left Join(Ventas2)
LOAD IdVenta
, Cantidad
, Precio
SQL SELECT *
FROM EMPRESA.dbo.Detalle_Ventas;
LEFT JOIN(Ventas2)
LOAD IdClienteMes
, Sum(Cantidad) as Ventas
Resident Ventas2
Order By IdCliente, Mes;
Ventas:
LOAD *,
if(Ventas <= 1, 'G1',
if(Ventas <= 3, 'G2',
if(Ventas <= 5, 'G3',
if(Ventas <= 6, 'G4',
'G5')))) as Grupo
Resident Ventas2;
DROP Table Ventas2;
DROP Field IdClienteMes;
Un saludo y espero haberte ayudado.
Hola de nuevo, no he tenido suerte! Lo que ocurre es que la recarga no concluye, carga millones y millones de datos y jamás termina. Éste documento no tarda mas de 30 segundos en recargar y con éste anexo en el script ha pasado ya una hora y no termina de recargar. Ya no sé que mas intentar, alguna idea?
Hola Walterlh,
¿Con qué ejemplo lo estás probando, con el de Sonia, el primero mio o el segundo mio?.
¿Puedes pasar el script para ver como ha quedado, o mejor, el documento entero?
Un saludo.
Emilio te paso el script a tu correo electrónico. Intenté todas, tanto las tuyas como la idea de Sonia. Confirmame la recepción el email.