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

Año anterior evaluado desde un Aggr()

Hola a todos! estoy intentando descifrar un problema que no puedo resolver.

Tengo una tabla simple donde muestro los productos, su presentación, venta y un cálculo que depende de la presentación del producto. Ejemplo:

Captura.PNG

Donde:

calculo = If(presentacion='U', sum(venta)/2, Sum(venta)*2)

Luego muestro los totales por mes:

Captura1.PNG

Sum(Aggr((if(presentacion='U', sum(venta)/2, Sum(venta)*2)), id_producto, producto, presentacion, mes))

(no estoy seguro de estar haciendolo bien)

Luego el problema principal de esta consulta es que quiero mostrar un comparativo del calculo con el año anterior:

para lo que uso:

Sum(Aggr((if(presentacion='U', sum({$<año={$(=Only(año)-1)}>} venta)/2, Sum({$<año={$(=Only(año)-1)}>} venta)*2)), id_producto, producto, presentacion, mes))

Pero no me da los totales correctos, da resultados pero no son los correctos.

¿Me pueden ayudar?

3 Replies
rubenmarin

Hola Walter, puede ser por:

- En el set del año, preguntando por only se supone que siempre habrá un único año seleccionado, si hay más de uno devolverá nulo:

año={$(=Max(año)-1)}

- Añadir set analysis del primer sum:

Sum({$<año={$(=Max(año)-1)}>} Aggr(

- Es necesario el id_producto y el producto en el aggr?

Sum({$<año={$(=Max(año)-1)}>} Aggr((if(presentacion='U', sum({$<año={$(=Max(año)-1)}>} venta)/2, Sum({$<año={$(=Max(año)-1)}>} venta)*2)), mes, presentacion))

walter_hardy
Contributor III
Contributor III
Author

Hola Ruben, ante todo gracias por tu ayuda. Lo del Only tienes razón, es mejor hacerlo con max(). El set del sum del Aggr() ya lo había probado antes, sin éxito. Y por último lo del id_producto y producto en el aggr() parece ser necesario, al menos el id_producto, porque intenté sacárselo y los importes cambian.

  Seguiré intentando

rodri_morales
Creator II
Creator II

Hola Walter,

Una solución que puedes implementar para ese caso que es bastante simple y te va a solucionar muchos problemas para evitar usar Aggr (que afectan a la performance dependiendo de la cantidad de registros que tengas) es crear una tabla nueva con los totales por mes.

Deberías hacer algo así:

TablaEjemplo:

LOAD

     Mes,

     SUM(IF(Presentacion='U', Venta/2, Venta*2))     as CalculoMensual

Resident TablaDatos

Group by Mes

;

Esta tabla tendría los totales por mes. Si en la tabla de datos tienes el campo "Mes" la relación ya se va a generar sola y la ventaja es que vas a tener un único valor de "CalculoMensual" para cada mes, independientemente de que en la tabla de datos tengas una fecha y cada fecha se relacione con su total mensual.

Espero que te sirva.

Saludos!