Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Write Table now available in Qlik Cloud Analytics: Read Blog
cancel
Showing results for 
Search instead for 
Did you mean: 
andresdiaz
Contributor II
Contributor II

Suma acumulada con negativos y positivos

Hola queridos colegas.

Estoy tratando de hacer una suma acumulada, aquí la cuestión es que las unidades las tengo que sumar o restar dependiendo del tipo de comprobante. Ventas resta unidades y Remito Stock suma.  La expresión que estaba usando es 

RangeSum(Above(TOTAL Sum([IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)))

Intente condicionando con una condición así:

if(
Tipo_Movimiento = 'Remitos_Stock',
RangeSum(Above(TOTAL Sum([IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL))),
RangeSum(Above(TOTAL Sum(-([IT_MovimientosMercaderia.Unidades])), 0, RowNo(TOTAL)))
)

Pero el resultado no es el esperado, por ejemplo en este caso debería dar como resultado la columna de stock

-80

21780

24000

23997

23987

image.png

Cambien intente cambiar el signo de la columna de unidades con la expresión:

if(
Tipo_Movimiento = 'Remitos_Stock',
[IT_MovimientosMercaderia.Unidades],
-([IT_MovimientosMercaderia.Unidades])
)

Veo la columna con los valores con los signo bien, pero no me imagino como hacer la sumatoria de la columna en la de stock.

Muchas Gracias por su ayuda de antemano

 

1 Solution

Accepted Solutions
rubenmarin

La mejor solución sigue siendo lo que comenté en el anterior post sobre tener un campo con el stock en el signo correcto para que sea solo sumarlos.

Si quieres antes de hacerlo puedes probar con incluirlo todo en un único above:

RangeSum(
Above(TOTAL Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'3','5','11','12','18','19'}>}[IT_MovimientosMercaderia.Unidades])
+Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'1','2','15','20'}, [Remitos_Stock.ID_Deposito_Stock_Destino] = {'1'}>}[IT_MovimientosMercaderia.Unidades])
-Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'7','8','9','10','14','16','17','21','100001'}>}[IT_MovimientosMercaderia.Unidades])
-Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'1','2','15','20'}, [Remitos_Stock.ID_Deposito_Stock] = {'1'}>}[IT_MovimientosMercaderia.Unidades])
-Sum({<Tipo_Movimiento={'Ventas'}>}[IT_MovimientosMercaderia.Unidades])
-Sum({<Tipo_Movimiento={'Remitos_Ventas'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL))

View solution in original post

6 Replies
rubenmarin

Hola Andrés, podrías probar si así te funciona:

RangeSum(Above(TOTAL Sum({<Tipo_Movimiento={'Remitos_Stock'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)), -Above(TOTAL Sum({<Tipo_Movimiento-={'Remitos_Stock'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)))

andresdiaz
Contributor II
Contributor II
Author

Hola Ruben gracias por tu ayuda, tu expresión me ayudo bastante usando la misma lógica, agrega algunas opciones mas para ir afinando el filtrado y las opciones, pero obtengo un comportamiento no deseado.

RangeSum(
Above(TOTAL Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'3','5','11','12','18','19'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)),
Above(TOTAL Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'1','2','15','20'}, [Remitos_Stock.ID_Deposito_Stock_Destino] = {'1'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)),
-Above(TOTAL Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'7','8','9','10','14','16','17','21','100001'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)),
-Above(TOTAL Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'1','2','15','20'}, [Remitos_Stock.ID_Deposito_Stock] = {'1'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)),
-Above(TOTAL Sum({<Tipo_Movimiento={'Ventas'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)),
-Above(TOTAL Sum({<Tipo_Movimiento={'Remitos_Ventas'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL)),
)

clipboard_image_0.png

Viene realizando los cálculos con 24000 que es el ultimo de Remitos_Stock, pero no los mantiene en el acumulado, quizás mi expresión no es la mas optima pero es lo que me imagine hacer. En esta imagen muestra cuando llega a otro Remitos_Stock y ahí si le aplica el calculo.

clipboard_image_1.png

En cada tipo de comprobante tengo para aplicar filtro y también si lo resta o las suma a la unidades.

Valoro mucho tu tiempo, gracias !!!

rubenmarin

Hola Andrés, parece que se está saltando filas, con un ejemplo me podría hacer una idea de lo que está haciendo.

En cualquier caso si va a tener tantos condicionantes sería mejor dejar preparado en el script el campo unidades con el signo que corresponda. 

Puedes crear un campo adicional que se llame por ejemplo UnidadesSigno donde multipliques el campo [IT_MovimientosMercaderia.Unidades] por 1 o -1 según las condiciones que has puesto, así solo tendrías que hacer:

RangeSum(Above(TOTAL Sum([IT_MovimientosMercaderia.UnidadesSigno]), 0, RowNo(TOTAL)))

Usando mappings joins o lookup puedes comprobar datos de otras tablas para llevar el valor de ID_Codigo_Accion o ID_Deposito_Stock a la tabla de IT_MovimientosMercaderia y hacer las comprobaciones.

Saludos.

andresdiaz
Contributor II
Contributor II
Author

Perdón, quizás en contestar apurado no demostré mejor el ejemplo, aquí realice unas imágenes que explican mejor lo acontecido. y la formula también en imagen que es mas visible y ordenado que poner texto. No me quiero dar por vencido porque pienso que falta muy poco. Estuve intentando todo el dia. Jejeje sin exito!

Screenshot_1.png

Y la expresión la dejo a continuación. Lo que trate de realizar es que, dependiendo del tipo de comprobante. Remitos_Stock - Ventas - Remitos_Ventas y de parámetros que tienen cualquier de esos 3 tipos de comprobantes, reste o sume la cantidad de unidades. Espero haberlo explicado mejor.

Screenshot_2.png

Mas que agradecido por su tiempo.  Saludos

rubenmarin

La mejor solución sigue siendo lo que comenté en el anterior post sobre tener un campo con el stock en el signo correcto para que sea solo sumarlos.

Si quieres antes de hacerlo puedes probar con incluirlo todo en un único above:

RangeSum(
Above(TOTAL Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'3','5','11','12','18','19'}>}[IT_MovimientosMercaderia.Unidades])
+Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'1','2','15','20'}, [Remitos_Stock.ID_Deposito_Stock_Destino] = {'1'}>}[IT_MovimientosMercaderia.Unidades])
-Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'7','8','9','10','14','16','17','21','100001'}>}[IT_MovimientosMercaderia.Unidades])
-Sum({<Tipo_Movimiento={'Remitos_Stock'},[Remitos_Stock.ID_Codigo_Accion]={'1','2','15','20'}, [Remitos_Stock.ID_Deposito_Stock] = {'1'}>}[IT_MovimientosMercaderia.Unidades])
-Sum({<Tipo_Movimiento={'Ventas'}>}[IT_MovimientosMercaderia.Unidades])
-Sum({<Tipo_Movimiento={'Remitos_Ventas'}>}[IT_MovimientosMercaderia.Unidades]), 0, RowNo(TOTAL))

andresdiaz
Contributor II
Contributor II
Author

Muchas Gracias por tu ayuda.

Efectivamente al agregar todo dentro de un Above, funciono con los resultados esperados.

👏👏👏👏👏👏👏