Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
Es el parentensis al final del IF (antes del AS NUMVIS,)
Fijate de agregar o sacar alguno
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;
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];
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
Es el parentensis al final del IF (antes del AS NUMVIS,)
Fijate de agregar o sacar alguno
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!!