Skip to main content
Announcements
NEW: Seamless Public Data Sharing with Qlik's New Anonymous Access Capability: TELL ME MORE!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

crear tabla con datos calculados en script

Hola a tod@s

tengo una tabla con las ventas
vtas:
LOAD  @4 as [FECHA],
     @14 as [IMPORTE],
     @21 as [CLIENTE]
FROM
C:\vtas.txt
(txt, codepage is 1252, no labels, delimiter is ',', msq);

//HE CREADO IN LINE 3 TABLAS, PARA SABER LA FRECUENCIA DE VISITAS OSEA EL NUMERO DE VECES QUE HA COMPRADO UN CLIENTE
Freq:
LOAD * INLINE [
    VisitaDesde, VisitaHasta, Frequency
    1, 1, 0
    2, 2, 1
    3, 3, 2
    4, 4, 3
    5, 6, 4
    7, 9999, 5
];

//DIAS DESDE LA ULTIMA COMPRA
Recen:
LOAD * INLINE [
    DiasDesde, DiasHasta, Recency
    2921, 999999, 1
    2556, 2920, 2
    2191, 2555, 3
    1826, 2190, 4
    1461, 1825, 5
    1096, 1460, 6
    731, 1095, 7
    366, 730, 8
    181, 365, 9
    0, 180, 10
];


//DINERO TOTAL DE LAS COMPRAS
Mone:
LOAD * INLINE [
    DineroDesde, DineroHasta, Monetary
    0, 159, 1
    151, 250, 2
    251, 350, 3
    351, 450, 4
    451, 550, 5
    551, 650, 6
    651, 750, 7
    751, 850, 8
    851, 950, 9
    951, 999999, 10
];


RFM:
load [CLIENTE], max(FECHA), sum(IMPORTE), count(CLIENTE) resident vtas  GROUP BY [CLIENTE] ORDER  BY [CLIENTE];

Me gustaria en esta tabla rfm, tener varios campos calculados que dependiendo del rango en el que este sum(IMPORTE) se guarde el valor resultante de la tabla Mone

Osea ...para sum(IMPORTE) si esta en el rango > 151 y <250 me devuelva 2 y se guarde en el mismo registro
lo mismo para recen y freq.

no sé si me he explicado... os pongo lo que he intentado hacer pero no funciona

load max(CLIENTE), sum(IMPORTE), count(CLIENTE),
   if (count(CLIENTE)=1, 0) as NUMVIS,  
   if (count(CLIENTE)=2 , 1) as NUMVIS,
   if (count(CLIENTE)=3 , 2) as NUMVIS,
   if (count(CLIENTE)=4 , 3) as NUMVIS, 
         if (count(CLIENTE)=>5 and count(CLIENTE)<=6, 4) as NUMVIS,
   if (count(CLIENTE)=> 7 , 5) as NUMVIS,
      resident vtas  GROUP BY [CLIENTE] ORDER  BY [CLIENTE];


Alguna sugerencia de como poder crear una tabla a partir de campos calculados?

gracias por adelantado

Quim

1 Solution

Accepted Solutions
jvitantonio
Luminary Alumni
Luminary Alumni

Es el parentensis al final del IF (antes del AS NUMVIS,)

Fijate de agregar o sacar alguno

View solution in original post

5 Replies
Not applicable
Author

también lo he probado con case y tampoco le gusta..

RFM:

load [CLIENTE], max(FECHA), sum(IMPORTE), count(CLIENTE) resident vtas  GROUP BY [CLIENTE] ORDER  BY [CLIENTE];

  switch count(CLIENTE)

  case 1

   NUMVIS = 0

  case 2

   NUMVIS = 1

  case 3

   NUMVIS = 2

  case 4

   NUMVIS = 3

  case count(CLIENTE) >=5 and count(CLIENTE) <=6

   NUMVIS = 4

  case count(CLIENTE) >=7

   NUMVIS = 5;

jvitantonio
Luminary Alumni
Luminary Alumni

Hola, intenta con IF anidados:

load max(CLIENTE), sum(IMPORTE), count(CLIENTE),

   if (count(CLIENTE)=1, 0,if (count(CLIENTE)=2 , 1,  if (count(CLIENTE)=3 , 2, if (count(CLIENTE)=4 , 3, if (count(CLIENTE)=>5 and count(CLIENTE)<=6, 4, 7))))) as NUMVIS,

      resident vtas  GROUP BY [CLIENTE] ORDER  BY [CLIENTE];

Not applicable
Author

hola , gracias por la rapidez qlikuser14!!

cuando lo ejecuto me sale este error

Error in expression: ')' expected

y por mas vueltas que le doy..no veo donde falta el parentesis...

alguna sugerencia? gracias de nuevo

jvitantonio
Luminary Alumni
Luminary Alumni

Es el parentensis al final del IF (antes del AS NUMVIS,)

Fijate de agregar o sacar alguno

Not applicable
Author

finalmente el and no le gustaba..así que he dejado la linea de la siguiente manera

load CLIENTE, max(FECHA), sum(IMPORTE), count(CLIENTE),

   if (count(CLIENTE)=1, 0, if (count(CLIENTE)=2 , 1,  if (count(CLIENTE)=3 , 2, if (count(CLIENTE)=4 , 3 , if (count(CLIENTE)=5 , 4 , if (count(CLIENTE)=6 , 4 , 5 )))))) as NUMVIS

      resident vtas  GROUP BY [CLIENTE] ORDER  BY [CLIENTE];

muchisimas gracias por tu ayuda!!