Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos días, amigos.
Tengo una tabla de saldos de cuentas en la que dispongo de los campos SALDO_INICIAL, DEBE_MES_01...DEBE_MES_12, HABER_MES_01...HABER_MES_12. ¿Cómo hacer para calcular y disponer del saldo acumulado de cada mes, teniendo en cuenta que esto se define de la siguiente manera: saldo_acum_mes_i = SALDO_INICIAL + suma( j <= i , DEBE_MES_(j) - HABER_MES_(j))?
A día de hoy, lo hago sin ningún procedimiento iterativo, lo que me lleva a escribir mucho y a unos script dificultosos de mantener. Busco un procedimiento iterativo.
He probado con uno, pero no consigo asignar un nombre simple a los campos donde alojo los cálculos, y colocarlos en una sola tabla.
Adjunto el archivo de mi ensayo.
¿Alguien me puede ayudar? Gracias de antemano
Corrijo la última respuesta, pues había un error importante. Sobre todo el JOIN, daba lugar a terribles productos cartesianos que no acaban bien...
Cambio los join por INNER JOIN, y además, tomo los registros de la primera tabla de forma que se unan a los de la que se va construyendo a través de un par de campos que forman clave primaria, en mi caso CUENTA y AÑO.
SET vMeses = '01,02,03,04,05,06,07,08,09,10,11,12';
for i = 1 to 12
LET vSaldoAcumulado = 'SALDO_INICIAL';
let vNombre = 'SaldoMes' & $(i);
for j=1 to $(i)
LET vMes = SubField('$(vMeses)', ',', $(j));
LET vSaldoMes = 'DEBE_MES_' & $(vMes) & '- HABER_MES_' & $(vMes);
vSaldoAcumulado = vSaldoAcumulado & '+' & vSaldoMes;
NEXT
if ($(i)=1) then
datos_numeradores:
LOAD CUENTA, RATIO, ENTIDAD, AÑO, VALOR_ABS_REAL, OPERACION, CONC_OPERACION Resident datos_brutos_cuentas_numeradores;
Inner Join LOAD CUENTA, AÑO, $(vSaldoAcumulado) as $(vNombre) Resident datos_brutos_cuentas_numeradores;
ELSE
Inner Join LOAD CUENTA, AÑO, $(vSaldoAcumulado) as $(vNombre) Resident datos_brutos_cuentas_numeradores;
ENDIF
NEXT
DROP Table datos_brutos_cuentas_numeradores;
Corrijo la última respuesta, pues había un error importante. Sobre todo el JOIN, daba lugar a terribles productos cartesianos que no acaban bien...
Cambio los join por INNER JOIN, y además, tomo los registros de la primera tabla de forma que se unan a los de la que se va construyendo a través de un par de campos que forman clave primaria, en mi caso CUENTA y AÑO.
SET vMeses = '01,02,03,04,05,06,07,08,09,10,11,12';
for i = 1 to 12
LET vSaldoAcumulado = 'SALDO_INICIAL';
let vNombre = 'SaldoMes' & $(i);
for j=1 to $(i)
LET vMes = SubField('$(vMeses)', ',', $(j));
LET vSaldoMes = 'DEBE_MES_' & $(vMes) & '- HABER_MES_' & $(vMes);
vSaldoAcumulado = vSaldoAcumulado & '+' & vSaldoMes;
NEXT
if ($(i)=1) then
datos_numeradores:
LOAD CUENTA, RATIO, ENTIDAD, AÑO, VALOR_ABS_REAL, OPERACION, CONC_OPERACION Resident datos_brutos_cuentas_numeradores;
Inner Join LOAD CUENTA, AÑO, $(vSaldoAcumulado) as $(vNombre) Resident datos_brutos_cuentas_numeradores;
ELSE
Inner Join LOAD CUENTA, AÑO, $(vSaldoAcumulado) as $(vNombre) Resident datos_brutos_cuentas_numeradores;
ENDIF
NEXT
DROP Table datos_brutos_cuentas_numeradores;