Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
rodri_morales
Creator II
Creator II

Acumular Importes

Buen dia a todos,

Vengo con un problema, necesito obtener el saldo a medida que se pagan cuotas. Lo quise hacer por script y no pude, asi que decidi acumular los importes pagados en una tabla pivotante, pero no puedo hacerlo tampoco. Si aguien me puede ayudar.

Acumular.png

Necesito que la columna ACU Pagado sea la acumulacion de Importe Pagado, para despues restar las columnas y poder obtener el saldo.

Si alguien tiene alguna solucion distinta para obtener el saldo, va a ser bienvenida.

Muchas graicas

1 Solution

Accepted Solutions
rubenmarin

Ok, me he dado cuenta de otra cosa, al usar peek() debes usar los valores ya cargados en QlikView, el nombre del campo debe ser el del alias, por lo tanto sería:

If(Peek(BancoTemp)=BancoPrestamo and Peek(NumPrestamoTemp)=NumPrestamo,

Peek([ACU Pagado])+ImporteCuotaPagado, ImporteCuotaPagado) as [ACU Pagado]

Tampoco acabo de entender lo de meterlo en un bucle, creo que no es necesario.

View solution in original post

10 Replies
rubenmarin

Hola Rodrigo, puedes probar: RangeSum(Above(Sum([Importe Pagado]), 0, RowNo()))

Auqnue ahora me fijo que al ser una tabla pivotante te dará problemas, creo que tu primera opción de intentar resolverlo en el script es la mejor solución...

LOAD ...

     [Importe Pagado]

     If(Peek(Banco)=Banco and Peek([Numero Prestamo])=[Numero Prestamo], Peek([ACU Pagado])+[Importe Pagado], [Importe Pagado]) as [ACU Pagado],

....

FROM ...

Order by Banco, [Numero Prestamo], NumCuota;

rodri_morales
Creator II
Creator II
Author

Intente resolverlo en el script de la siguiente forma, de acuerdo a lo que me dijiste, pero no dio resultado:

LET vCantFilas=NoOfRows('Prestamos');

FOR i=1 to vCantFilas-1

  PrestamosTemp:

  LOAD

            BancoPrestamo as BancoTemp,

            NumCuota as CuotaTemp,

            NumPrestamo as NumPrestamoTemp,

            TotalPrestamo as TotalPrestamo,

            ImporteCuotaPagado as ImportePagadoTemp,

            If(Peek(BancoPrestamo)=BancoPrestamo and Peek(NumPrestamo)=NumPrestamo,                     Peek(ImporteCuotaPagado)+ImporteCuotaPagado, ImporteCuotaPagado) as [ACU Pagado]

  Resident Prestamos

  Order by BancoPrestamo, NumPrestamo, NumCuota;

NEXT

*** EDIT ***

Probe tambien cambiando la tabla pivotante a una tabla simple y utilice la funcion RangeSum(Above(Sum(ImporteCuotaPagado), 0, RowNo())) pero tampoco dio resultado, muestra el mismo valor que ImporteCuotaPagado, es decir, el valor que se pago en la cuota, pero no la acumulacion.

rubenmarin

El problema está en esta línea:

If(Peek(BancoPrestamo)=BancoPrestamo and Peek(NumPrestamo)=NumPrestamo,

Peek(ImporteCuotaPagado)+ImporteCuotaPagado, ImporteCuotaPagado) as [ACU Pagado]

La parte en negrita debería ser:

Peek([ACU Pagado])+ImporteCuotaPagado

Quieres acumular el importe de esa línea a lo que llevas acumulado de las anteriores, si no solo estarías acumulando el importe actual con el inmediatamente anterior.

rodri_morales
Creator II
Creator II
Author

Ruben, modifique la linea tal cual me dijiste pero no funciona.

Me sigue dando el valor de ImporteCuotaPagado sin acumularse con el anterior digamos.

rubenmarin

Ok, me he dado cuenta de otra cosa, al usar peek() debes usar los valores ya cargados en QlikView, el nombre del campo debe ser el del alias, por lo tanto sería:

If(Peek(BancoTemp)=BancoPrestamo and Peek(NumPrestamoTemp)=NumPrestamo,

Peek([ACU Pagado])+ImporteCuotaPagado, ImporteCuotaPagado) as [ACU Pagado]

Tampoco acabo de entender lo de meterlo en un bucle, creo que no es necesario.

rodri_morales
Creator II
Creator II
Author

Funciono perfecto! Muchisimas gracias!

rodri_morales
Creator II
Creator II
Author

Ruben, pude calcular el valor acumulado perfectamente como me indicaste, luego aproveche para calcular el saldo, abajo del calculo del ACU Pagado, de la siguiente forma:

Peek(TotalPrestamoTemp)-Peek([ACU Pagado]) as Saldo

Pero el calculo me lo agrega un valor adelantado, y por lo tanto no me pone el primer saldo. Es decir, todas las filas del saldo están adelantadas en 1 valor.

El resultado de la resta TotalPrestamoTemp - ACU Pagado para la CuotaTemp 1, me lo pone en la fila de la CuotaTemp 2.

detalle.png

etendero
Partner - Creator
Partner - Creator

Hola Rodrigo,

Prueba con el siguiente ejemplo como expresión [ACU Pagado]:

[Total Prestamo] - RangeSum([Importe Pagado], Above(TOTAL [ACU Pagado]))

Un saludo y espero haberte ayudado.

rubenmarin

Hola Rodrigo, cada fila debería restar su propio acumulado, no el anterior. Para añadir el importe de la línea actual solamente tendrías que sumar el ImporteCuotaPagado.

También ten en cuenta que estemos contando el mismo préstamo, si no lo compruebas puede que arrastres el acumulado del préstamo anterior:

TotalPrestamoTemp - If(Peek(BancoTemp)=BancoPrestamo and Peek(NumPrestamoTemp)=NumPrestamo,

Peek([ACU Pagado])+ImporteCuotaPagado, ImporteCuotaPagado) as Saldo

También deberías tener en cuenta como quieres representarlo... si va a ser en una tabla pivotante ¿Como sería la expresión si se contrae alguna de las columnas? Supongo que podrías usar la expresión:

FirstSortedValue(Saldo, -NumCuota)

Creo que esta expresión funcionaría tanto con la tabla expandida como contraída.