Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenas Días:
Quiero realizar el cálculo del importe de ventas de cada cliente al mes aplicando unos descuentos progresivos en función del número de pedidos que realiza cada mes cada cliente.
Para ello tengo unas tablas con los siguientes campos: ID_Cliente, [Fecha y Hora] , Importe
En primer tengo que ordenar las ventas por orden de fecha y hora para ordenar cronologicamente los pedidos y después aplicar los criterios de descuentos progresivos por volumen de pedidos al mes.
Los criterios de los descuentos progresivos a aplicar son los siguientes:
1º.- A las 5 primeras compras del mes no se le aplica descuento.
2º.- De la 6ª compra a la 9ª se le aplica un 5% de descuento a cada compra.
3º.- De la 10ª compra a la 18ª se le aplica un 15% de descuento a cada compra.
4º.- A partir de la compra nº 19 en adelante se aplica un 30% de descuento a cada compra.
"Quiero saber si lo puedo realizar mediante SET ANALYTICS"
El diagrama básico es el siguiente:
Hola @EGGUINEA , revisando tu requerimiento, tengo un ejemplo para resolverlo por script y otro para resolverlo directo en el gráfico, pero sin set analisis.
Ejemplo 1 (Script)
Agregar en el script un correlativo del N° de venta. Luego se podría calcular el Monto con descuento en el script y/o en el gráfico:
//Datos de ejemplo
Aux:
Load * INLINE [
ID_Cliente, Fecha, Importe
1,1, 1
1,2,1
1,3,1
1,4,1
1,5,1
1,6,1
1,7,11
1,8,11
1,9,1
1,10,1
1,11,1
1,12,1
1,13,1
1,14,1
1,15,1
1,16,1
1,17,1
1,18,1
1,19,1
1,20,1
1,21,1
2,1,11
2,2,1
2,3,1
2,4,1
];
Data:
Load
Fecha,
ID_Cliente,
Importe,
autonumber(Fecha, ID_Cliente) as CorrelativoVentaCliente //correlativo para usar en los rangos de descuento
Resident Aux;
drop table Aux;
IntervaloDescuento: //Creación de los rangos de descuento, revisar si usas puntos o comas como separador decimal
LOAD * INLINE [
Inicio, Termino, Descuento
1, 5, 0
6, 9, "0,05"
10, 18, "0,15"
19, 99999999, "0,3"
];
//Incorporación del descuento según rango según correlativo
Inner Join IntervalMatch (CorrelativoVentaCliente)
LOAD Inicio, Termino
Resident IntervaloDescuento;
left join(Data)
Load
CorrelativoVentaCliente,
Descuento
Resident IntervaloDescuento;
drop table IntervaloDescuento;
//tabla final con campo calculado
Datos:
Load
Fecha,
ID_Cliente,
Importe,
Descuento,
Importe * (1-Descuento) as ImporteConDescuento, //mismo calculo se puede hacer en el grafico
CorrelativoVentaCliente
Resident Data;
drop table Data;
Tabla simple con los campos y la expresión :
@EGGUINEA , ejemplo 2, sólo expresión de gráfico, adjunto el qvw de ejemplo, ojalá te sirva.
Sum (Importe) * 1 - (
if(rank(-sum(Fecha)) <= 5, 0,
if(rank(-sum(Fecha)) > 5 and rank(-sum(Fecha)) <= 9, 0.05,
if(rank(-sum(Fecha)) > 9 and rank(-sum(Fecha)) <= 18, 0.15,
if(rank(-sum(Fecha)) >= 19, .3)))))
Buenas Tardes QFabian, muchas gracias por la ayuda.
Me ha funcionado cogiendo unos pocos datos, para comprobarlo, pero me surge otro problema debido a la gran cantidad de datos que tengo, ya que no puedo hacer un Load * INLINE con el número de datos que tengo (muchos miles).
Probaré el segundo método que me has mandado para resolverlo directo en el gráfico mediante la función if....
Un saludo