Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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
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.
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;
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.
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.
Ruben, modifique la linea tal cual me dijiste pero no funciona.
Me sigue dando el valor de ImporteCuotaPagado sin acumularse con el anterior digamos.
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.
Funciono perfecto! Muchisimas gracias!
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.
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.
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.