Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Load con 2 tablas

Buenos días,

Tengo 2 tablas como describo a continuación:

Freq:

LOAD *, Frecuencia

sql select IdCli, Lista, Año, Mes, count(*) as NumAlb

from ....

Group IdCli, Lista, Año, Mes

TotalAlbaranes:

LOAD Lista, Año, Mes, sum(NumAlb) as Total

Resident Freq

Group by Lista, Año, Mes

Ahora necesito sacar el porcentaje de NumAlb y he probado esto:

LOAD IdCli, Lista, Año, Mes, NumAlb, Total, (NumAlb / Total) as FrecAlb

Resident Freq, TotalAlbaranes

LOAD IdCli, Lista, Año, Mes, NumAlb, Total, (NumAlb / Total) as FrecAlb

Resident Freq

Left join TotalAlbaranes

Pero me de un error

"No se encuentra Total"

¿Como puedo juntarlas?

1 Solution

Accepted Solutions
Miguel_Angel_Baeyens

Hola,

Perdona que esté tan espeso, probablemente algo así sea lo que buscas.

Freq:

LOAD IdCli,

     Lista,

     Año,

     Mes,

     NumAlb,

     Frecuencia; // ¿Que campo es este?

sql select IdCli, Lista, Año, Mes, count(*) as NumAlb

from ....

Group IdCli, Lista, Año, Mes

// Unimos esta tabla con la de arriba de forma que cada linea de Freq tendra el Total

TotalAlbaranes:

LEFT JOIN (Freq) LOAD Lista, Año, Mes, Sum(NumAlb) as Total // Albaranes por Lista, Año y Mes

Resident Freq

Group by Lista, Año, Mes;

// Obtenemos el porcentaje, para ello hacemos otra carga RESIDENT

// En esta tabla tenemos todos los campos, incluyendo NumAlb, Total y Porcentaje

Porcentajes:

NOCONCATENATE LOAD *,

     NumAlb / Total AS Porcentaje

RESIDENT Freq;

// borramos la original

DROP TABLE Freq;

Espero que te sirva

Miguel

View solution in original post

7 Replies
Miguel_Angel_Baeyens

Hola,

Si comentas los LOAD RESIDENT en los que calculas FrecAlb, ¿ves las dos tablas Freq y TotalAlbaranes correctamente? En segundo lugar, el primer load resident tiene dos tablas, puedes hacer un join, pero no puedes cargar datos de dos tablas.

¿Podrías adjuntar el script real tal como lo estás utilizando hasta donde funcione?

Miguel

Not applicable
Author

Gracias por responder,

Si, las 2 tablas ( Freq y TotalAlbaranes ) se ven correctamente.

Realmente lo que quiero conseguir es unir las 2 tablas, y he probado las 2 formas de antes y esta tambien pero algo falla:

FreqPorcentual:

Left join (Freq)

LOAD *, (NumAlb / Total) as FreqAlb

Resident TotalAlbaranes

Miguel_Angel_Baeyens

Hola,

Para que el LEFT JOIN se realice correctamente, los campos en ambas tablas deben llamarse de forma idéntica, y en caso de haber más de un campo que se llame igual, sería mucho más cómodo crear un campo equivalente a la clave compuesta en la parte del LOAD en ambas tablas.

Por otro lado, utiliza Sum(NumAlb / Total) AS FreqAlb en lugar de solo paréntesis.

Espero que te sirva.

Miguel

Not applicable
Author

Gracias por responder,

Pero los campos no son los mismos en las 2 tablas, solo coinciden LISTA, AÑO y MES

Despues tengo en Freq: IdCLI y NumAlb

Y en TotalAlbaranes: Total

La cuestión es como juntar todos los campos en una única tabla...

He intentado

FreqPorcentual:

LOAD *

Resident TotalAlbaranes;

CONCATENATE (FreqPorcentual)

LOAD IdCliente, NumAlb, sum(NumAlb / Total) as FreqAlb

Resident Freq;

Y me da error "No existe la tabla"

Miguel_Angel_Baeyens

Hola,

Para juntar todos los campos en una misma tabla, cualquier JOIN funcionará, siempre que como mencioné antes, haya campos comunes en ambas tablas. Sin ver tu script salvo el ejemplo que pones arriba, parece que TotalAlbaranes y FreqPorcentual terminan siendo la misma tabla, ya que QlikView concatena automáticamente dos tablas cuando tienen el mismo número y nombre de campos. Un LOAD * RESIDENT, por definición, tendrá el mismo número y nombre de campos que la tabla RESIDENT de la que carga, así que lógicamente, CONCATENATE (FreqPorcentual) tendría que ser, en todo caso , CONCATENATE (TotalAlbaranes).

Otra cosa que puedes hacer es utilizar NOCONCATENATE para forzar que una tabla, aun teniendo el mismo número y nombre de campos no se añada a la anterior, aunque posteriormente deberás borrar con DROP una de las dos tablas (o se creará una tabla sintética).

FreqPorcentual:

NOCONCATENATE LOAD *

Resident TotalAlbaranes;

Recuerda que sin ver el script real es imposible detallar más la respuesta.

Miguel

Not applicable
Author

Mi script es esto:

Freq:

LOAD *, Frecuencia

sql select IdCli, Lista, Año, Mes, count(*) as NumAlb

from ....

Group IdCli, Lista, Año, Mes

TotalAlbaranes:

LOAD Lista, Año, Mes, sum(NumAlb) as Total

Resident Freq

Group by Lista, Año, Mes


Como he comentado antes, tengo que calcular un porcentaje entre NumAlb y Total.

Lo necesito en una tabla para porder utilizarlo luego en grafico.

Hasta ahora he conseguido unirlas con:

FreqPorcentual:

LOAD Lista, Año, Mes, IdCliente, NumAlb

Resident Freq;

NOCONCATENATE(TotalAlbaranes)

LOAD *

Resident TotalAlbaranes;

Drop table TotalAlbaranes; //Para no tener 2 tablas iguales

Ahora me queda el calculo y ya está.

Gracias por tu ayuda,

Miguel_Angel_Baeyens

Hola,

Perdona que esté tan espeso, probablemente algo así sea lo que buscas.

Freq:

LOAD IdCli,

     Lista,

     Año,

     Mes,

     NumAlb,

     Frecuencia; // ¿Que campo es este?

sql select IdCli, Lista, Año, Mes, count(*) as NumAlb

from ....

Group IdCli, Lista, Año, Mes

// Unimos esta tabla con la de arriba de forma que cada linea de Freq tendra el Total

TotalAlbaranes:

LEFT JOIN (Freq) LOAD Lista, Año, Mes, Sum(NumAlb) as Total // Albaranes por Lista, Año y Mes

Resident Freq

Group by Lista, Año, Mes;

// Obtenemos el porcentaje, para ello hacemos otra carga RESIDENT

// En esta tabla tenemos todos los campos, incluyendo NumAlb, Total y Porcentaje

Porcentajes:

NOCONCATENATE LOAD *,

     NumAlb / Total AS Porcentaje

RESIDENT Freq;

// borramos la original

DROP TABLE Freq;

Espero que te sirva

Miguel