Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola a todos,
Llevo unos cuantos días y no encuentro el resultado esperado, espero que alguien me pueda guiar un poco.
Actualmente tengo dos tablas
Tabla1:
Fecha | Contador | Valor |
---|---|---|
01/01/2017 | Contador 1 | 5 |
01/01/2017 | Contador 2 | 10 |
02/01/2017 | Contador 1 | 10 |
02/01/2017 | Contador 2 | 15 |
02/01/2017 | Contador 3 | 25 |
Tabla2
Fecha | NombreBalance | Calculo |
---|---|---|
01/01/2017 | Nombre 1 | Contador 1 + Contador 2 |
02/01/2017 | Nombre 1 | Contador 1 + Contador 2 |
02/01/2017 | Nombre 2 | Contador 2 + Contador 3 |
La idea es sustituir el nombre contador del campo cálculo de la tabla 2 por el valor de la tabla 1.
El resultado tendría que ser el siguiente:
Tabla3
Fecha | NombreBalance | Resultado |
---|---|---|
01/01/2017 | Nombre 1 | 15 |
02/01/2017 | Nombre 1 | 25 |
02/01/2017 | Nombre 2 | 40 |
He intentado lo siguiente, pero el resultado no es el esperado:
Tabla1:
Load
Fecha,
Contador,
Valor
Resident X;
Tabla2:
Load
Fecha,
NombreBalance,
Resultado
Resident ;
LET NumRows=NoOfRows('Tabla 1');
FOR i=1 to $(NumRows);
LET vContador = FieldValue('Contador' ,$(i)) ;
LET vFecha= FieldValue('Fecha',$(i));
LET vValor= FieldValue('Valor',$(i));
Tabla3:
LOAD
if(Fecha = '$(vFecha)', Replace(Calcul, '$(vContador )' , '$(vValor)')) as Resultado,
Fecha,
NombreBalance
Resident Tabla2;
NEXT i;
DROP Table Tabla2;
Cualquier ayuda, será bienvenida.
Muchas gracias.
Hola Laura,
si los contadores tienen un único valor en cada fecha creo que puedes conseguir el resultado que quieres calculando la Tabla3 de la siguiente manera:
MAP_VALORES:
Mapping LOAD Fecha&'_'&Contador AS Fecha_Contador,
Valor AS Val
Resident Tabla1;
Tabla3_TMP:
LOAD Fecha, NombreBalance,
ApplyMap('MAP_VALORES',Fecha&'_'&TRIM(SubField(Calculo,'+'))) AS Valor
Resident Tabla2;
DROP Tables Tabla1,Tabla2;
Tabla3:
LOAD Fecha, NombreBalance,
SUM(Valor) AS Resultado
Resident Tabla3_TMP
Group By Fecha, NombreBalance;
DROP Table Tabla3_TMP;
Un saludo
Hola Laura,
si los contadores tienen un único valor en cada fecha creo que puedes conseguir el resultado que quieres calculando la Tabla3 de la siguiente manera:
MAP_VALORES:
Mapping LOAD Fecha&'_'&Contador AS Fecha_Contador,
Valor AS Val
Resident Tabla1;
Tabla3_TMP:
LOAD Fecha, NombreBalance,
ApplyMap('MAP_VALORES',Fecha&'_'&TRIM(SubField(Calculo,'+'))) AS Valor
Resident Tabla2;
DROP Tables Tabla1,Tabla2;
Tabla3:
LOAD Fecha, NombreBalance,
SUM(Valor) AS Resultado
Resident Tabla3_TMP
Group By Fecha, NombreBalance;
DROP Table Tabla3_TMP;
Un saludo
Hola Alfredo,
Mil gracias por tu aportación, funciona !!!
Ahora, rizando más el rizo y si me puedes ayudar te lo agradeceré enormemente.
En el ejemplo que he adjuntado el cálculo es una suma y con la aportación que has hecho se resuelve perfectamente.
Mi duda es la siguiente:
En el caso que el cálculo sea un poco más complejo como por ejemplo:
Contador 1 - (contaddor 2 + contador 3) o Contador 1 / contador 2, la solución aplicado no resolvería mi problema, o eso creo.
La idea inicial que tenía era reemplazar el contador por su valor dejando los símbolos y aplicar un evaluate...
¿Se te ocurre alguna posible solución?
Y de nuevo muchas gracias.
Uff!!, eso es bastante mas complicado.
No he podido comprobar gran cosa pero creo que con el siguiente script puede funcionarte
MAP_VALORES:
Mapping LOAD Fecha&'_'&replace(Contador,' ','_') AS Fecha_Contador,
Valor AS Val
Resident Tabla1;
Tabla3:
NoConcatenate
LOAD Fecha, NombreBalance,
MapSubstring('MAP_VALORES', Replace(Calculo, 'Contador ', Fecha&'_Contador_')) as Calculo,
Evaluate(MapSubstring('MAP_VALORES', Replace(Calculo, 'Contador ', Fecha&'_Contador_'))) as Resultado
Resident Tabla2;
DROP Tables Tabla1,Tabla2;
Un saludo
Hola!!!
Me ha ido genial!!!!
Lo he reajustado muy poquito.
Mil gracias!
Un saludo