Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola a todos, la cuestión es la siguiente:
Tengo una tabla con tres campos: ID_CLIENTE, ID_VENDEDOR, FECHA_PEDIDO.
Lo que necesito hacer es calcular, en script, para cada vendedor qué clientes han hecho un pedido habiendo pasado un año o mas de su anterior pedido.
Aún no he encontrado una manera de calcularlo eficientemente.
¿Me echais una manilla?
Muchas gracias
Tienes razón,
La solución que planteas es correcta, siempre y cuando sólo tengas un histórico de 3 años como dices y que la fecha del pedido anterior no caiga en otro año.
Una solución para que contemple estos casos también, podía ser la siguiente:
, (DayNumberOfYear(FECHA_PEDIDO) + (((Year(Today()) - Year(FECHA_PEDIDO)) * 365))
- (DayNumberOfYear(Previous(FECHA_PEDIDO)) + (((Year(Today()) - Year(Previous(FECHA_PEDIDO))) * 365))
as DIAS_DISTANCIA
Un saludo.
Hola Juan Antonio,
Pues se me ocurre lo siguiente:
Pedidos_aux:
LOAD ...
, ID_CLIENTE
, ID_VENDEDOR
, FECHA_PEDIDO
, DayNumberOfYear(FECHA_PEDIDO) - DayNumberOfYear(Previous(FECHA_PEDIDO)) as DIAS_DISTANCIA
Resident Pedidos
Order by ID_CLIENTE, ID_VENDEDOR, FECHA_PEDIDO;
DROP Table Pedidos;
Pedidos:
LOAD *
Resident Pedidos_aux
Where DIAS_DISTANCIA > 365
DROP Table Pedidos_aux;
Evidentemente, habrá que adaptarlo a tu modelo de datos.
Un saludo y espero haberte ayudado.
Hola Emilio.
Muy buena propuesta, además de resolver esta situación de una manera muy eficaz, me ha ayudado a mejorar otros cálculos. Con estos tres campos (id_cliente, fecha_pedido, id_vendedor) la idea es calcular una serie de indicadores como:
- Tasa de recuperación de cliente: % de clientes que han hecho un pedido y hacia mas de un año que no lo hacían
- Tasa de perdida de clientes: % de clientes que hace mas de un año que no hacen un pedido.
- Tasa de adquisición: % Clientes que han realizado un cliente por primera vez
¿Se te ocurre como calcular la tasa de adquisición? Yo había pensado en hacer un count(fecha_pedido) para tener el total pedidos realizados, y si al restar el numero de pedidos en el periodo de análisis (mes, trimestre, etc) y el total de pedidos realizados el resultado es 0, entonces lo consideraría cliente nuevo.
¿Cómo lo ves?
Un saludo
Emilio: Me estoy dando cuenta de que al tener un histórico de pedidos de 3 años, tendría que realizar algún apaño del tipo:
left join (Pedidos)
Load
FECHA_PEDIDO,
if(year(FECHA_PEDIDO)= year (today()),0 ,
if(year(FECHA_PEDIDO)= year (today())-1,365,
if(year(FECHA_PEDIDO)= year (today())-2,730 ) )) AS DECALAJE
resident Pedidos;
Pedidos_aux:
LOAD ...
, ID_CLIENTE
, ID_VENDEDOR
, FECHA_PEDIDO
, (DayNumberOfYear(FECHA_PEDIDO) + DECALAJE) - (DayNumberOfYear(Previous(FECHA_PEDIDO)+DECALAJE)) as DIAS_DISTANCIA
Resident Pedidos
Order by ID_CLIENTE, ID_VENDEDOR, FECHA_PEDIDO;
DROP Table Pedidos;
Pedidos:
LOAD *
Resident Pedidos_aux
Where DIAS_DISTANCIA > 365
DROP Table Pedidos_aux;
¿Como lo ves?
Hola, me alegro que te haya servido.
Se me ocurriría algo similar a lo que planteas, siempre que te haya entendido bien. Escrito rápidamente y sin probar, para sacar el porcentaje, sería algo como:
Count(DISTINCT if( Count(TOTAL Fecha_Pedido) = 1, ID_Cliente)
/
Count(DISTINCT ID_Cliente)
¿verdad?
Un saludo.
Tienes razón,
La solución que planteas es correcta, siempre y cuando sólo tengas un histórico de 3 años como dices y que la fecha del pedido anterior no caiga en otro año.
Una solución para que contemple estos casos también, podía ser la siguiente:
, (DayNumberOfYear(FECHA_PEDIDO) + (((Year(Today()) - Year(FECHA_PEDIDO)) * 365))
- (DayNumberOfYear(Previous(FECHA_PEDIDO)) + (((Year(Today()) - Year(Previous(FECHA_PEDIDO))) * 365))
as DIAS_DISTANCIA
Un saludo.
Pensaba que al calcular el campo DECALAJE si funcionaria, aunque me doy cuenta de que debería de calcularlo de la siguiente manera:
left join (Pedidos)
Load
FECHA_PEDIDO,
if(year(FECHA_PEDIDO)= year (today()), 730 ,
if(year(FECHA_PEDIDO)= year (today())-1,365,
if(year(FECHA_PEDIDO)= year (today())-2, 0 ) )) AS DECALAJE
resident Pedidos;
Asi un pedido del 6/12/2014 tendría como dia del año ( 6 ) + decalaje ( 730 ) = 736 y un pedido del 30/12/2013 tendría como dia ( 364 ) + decalaje ( 365 )= 729 , siendo asi la distancia entre pedidos de 7 días, por lo que aparentemente si funciona .
Pero el DECALAJE lo estás calculando sobre la FECHA_PEDIDO, entonces le vas a aplicar el mismo DECALAJE tanto a FECHA_PEDIDO como a Previous(FECHA_PEDIDO) y no uno distinto a cada uno. Tu ejemplo sería:
Asi un pedido del 6/12/2014 tendría como dia del año ( 6 ) + decalaje ( 730 ) = 736 y un pedido del 30/12/2013 tendría como dia ( 364 ) + decalaje ( 365 730 ) = 729 1094, siendo así la distancia entre pedidos de 7 358 días, por lo que aparentemente si NO funciona.
Un saludo.
Tienes Razón. No había caído en que el decalaje se aplica únicamente a la fecha del pedido. Voy a ejecutar con la solución que me indicabas. Y luego a probar el tema de la tasa de adquisición, que aun no me he metido con ello.
gracias de nuevo.
Analizando y validando resultados, he caído en la cuenta de que un mismo cliente puede ser trabajado por varios vendedores, por lo que habría que controlar que se calcule el intervalo entre pedidos de cada vendedor en el mismo cliente.
Se me ocurre hacer un bucle variando el vendedor en cada pasada, pero me temo que podría ser bastante ineficaz.