Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
walter_hardy
Contributor III
Contributor III

Ventas mes anterior por productos

Hola a todos. Estoy haciendo un informe en Qlik Sense que pensé que iba a resultar más fácil pero me está costando horrores.

Se trata de comparar las unidades vendidas entre un año y el anterior, viéndolo por productos.

Las unidades se calculan dependiendo de si el producto es pesable (kgs) o NO:

Producto pesable = Kilogramos / (peso_promedio*unidades_por_caja)

Producto NO pesable = cantidad* unidades_por_caja

entonces:

unidades = if(pesable=1, Sum(Kilogramos) / (peso_promedio*unidades_por_caja), Sum(cantidad* unidades_por_caja)

para el año anterior hago

unidades = if(pesable=1, Sum({$<año={$(=Max(año)-1)}>}Kilogramos) / (peso_promedio*unidades_por_caja), Sum({$<año={$(=Max(año)-1)}>}cantidad* unidades_por_caja)

El cálculo parece hacerlo bien, pero el problema es que cuando hay productos que no se vendieron en 2018, pero si en 2017, entonces devuelve 0 (cero) o null.

Captura.PNG

Alguien me puede ayudar?

1 Solution

Accepted Solutions
rubenmarin

Puedes probar con:

If(Only({$<año={$(=Max(año)-1)}>} pesable)=1,...

View solution in original post

6 Replies
juliocodesal
Contributor III
Contributor III

La formula la evalúa en la dimensión (ID_producto), Max(año) en los productos donde no se compró tiene valor nulo.

Si tienes campos derivados de autocalendario sería más práctico algo del tipo:

if(pesable=1, Sum(Kilogramos) / (peso_promedio*unidades_por_caja), Sum(cantidad* unidades_por_caja)*CYTD

if(pesable=1, Sum(Kilogramos) / (peso_promedio*unidades_por_caja), Sum(cantidad* unidades_por_caja)*LYTD


Donde CYTD y LYTD son flags creadas en la carga de datos.


Mira esto:

https://help.qlik.com/es-ES/sense/September2017/Subsystems/Hub/Content/Measures/create-calendar-meas...

rubenmarin

Hola Walter, parece que al filtrar por año se pierdo el acceso a alguno de los datos necesarios, seguramente a peso_promedio y/o unidades_por_caja. Puede que haya que aplicarlo a pesable.

La función Only() sirve para devolver un valor sin función de agregación (Sum, Avg...) y permite aplicar un set analysis:

Only({$<año={$(=Max(año)-1)}>} peso_promedio*unidades_por_caja)

walter_hardy
Contributor III
Contributor III
Author

Intenté SIN éxito:

if(pesable=1,


Sum({$<año={$(=Max(año)-1)}>} Kilogramos) / Only({$<año={$(=Max(año)-1)}>} peso_promedio * unidades_por_caja),


Sum({$<año={$(=Max(año)-1)}>}cantidad * Only({$<año={$(=Max(año)-1)}>} unidades_por_caja))

walter_hardy
Contributor III
Contributor III
Author

Por lo que puedo observar en el detalle de una tabla simple, veo que el IF de la fórmula evalúa algunos productos que son pesables como NO pesables porque no tienen ventas en el año 2018. Cómo puedo evitar eso?

rubenmarin

Puedes probar con:

If(Only({$<año={$(=Max(año)-1)}>} pesable)=1,...

walter_hardy
Contributor III
Contributor III
Author

Con esa expresión sí funciona! Muchas gracias Ruben Marin