Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Laura_Cardona
Contributor III
Contributor III

Incluir campo y sustituir

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:

FechaContadorValor
01/01/2017Contador 15
01/01/2017Contador 210
02/01/2017Contador 110
02/01/2017Contador 215
02/01/2017Contador 325

Tabla2

FechaNombreBalanceCalculo
01/01/2017Nombre 1Contador 1 + Contador 2
02/01/2017Nombre 1Contador 1 + Contador 2
02/01/2017Nombre 2Contador 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

FechaNombreBalanceResultado
01/01/2017Nombre 115
02/01/2017Nombre 125
02/01/2017Nombre 240

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.

1 Solution

Accepted Solutions
aramirez
Contributor II
Contributor II

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

View solution in original post

4 Replies
aramirez
Contributor II
Contributor II

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

Laura_Cardona
Contributor III
Contributor III
Author

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.

aramirez
Contributor II
Contributor II

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

Laura_Cardona
Contributor III
Contributor III
Author

Hola!!!

Me ha ido genial!!!!

Lo he reajustado muy poquito.

Mil gracias!

Un saludo