Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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?
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
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
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
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
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"
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
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,
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