Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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:
Donde:
calculo = If(presentacion='U', sum(venta)/2, Sum(venta)*2)
Luego muestro los totales por mes:
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?
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))
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
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!