Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
EGGUINEA
Contributor
Contributor

Calcula el importe de ventas mensuales por cliente aplicando descuentos en función del número de pedidos realizados

 
 

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:

 

EGGUINEA_0-1647687354588.png

 

EGGUINEA_1-1647687354849.png

 

 

 

Labels (2)
3 Replies
QFabian
Specialist III
Specialist III

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 :

QFabian_2-1648084905517.png

 

 

https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/CounterFunctio...

 

IntervalMatch ‒ QlikView

QFabian
QFabian
Specialist III
Specialist III

@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)))))

QFabian_1-1648084853454.png

 

QFabian
EGGUINEA
Contributor
Contributor
Author

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