Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
walterlh
Creator II
Creator II

Asignar valores a los clientes desde otra tabla

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.

7 Replies
soniacoprosa
Creator
Creator

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,

etendero
Partner - Creator
Partner - Creator

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.

walterlh
Creator II
Creator II
Author

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ó.

etendero
Partner - Creator
Partner - Creator

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.

walterlh
Creator II
Creator II
Author

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?

etendero
Partner - Creator
Partner - Creator

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.

walterlh
Creator II
Creator II
Author

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.