Qlik Community

Third-Party Qlik Jobs

Area for people to learn more about current Qlik related job postings.

Not applicable

Uso del group by

La siguiente sentencia en SQL me funciona perfectamente, pero en qlikview no, y es que por lo que he comprobado el group by no funciona como en sql, al poner CodArticulo y CodComponente en el group by me salen todos los componentes que tiene ese artículo y yo sólo quiero quedarme con el componente de mayor cantidad, como puedo hacerlo?

Load CodArticulo as CodigoArticulo,

Max(CantidadCons) as PrimeraMatPrima,

ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodArticulo) as NombreArticulo,

CodigoComponente as CodComponente,

ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodigoComponente) as NombreComponente

resident LISTAMAT where TipoCoste='MAT PRIMA' group by CodArticulo,CodigoComponente;



14 Replies
Not applicable

Uso del group by

Try:


Load
*,
ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodComponente) as NombreComponente
Load
CodArticulo as CodigoArticulo,
Max(CantidadCons) as PrimeraMatPrima,
ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodArticulo) as NombreArticulo,
CodigoComponente as CodComponente
resident LISTAMAT where TipoCoste='MAT PRIMA' group by CodArticulo,CodigoComponente;


Not applicable

Uso del group by

[quote user="Fábio Simões"]

Load

*,

ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodComponente) as NombreComponente

Load

CodArticulo as CodigoArticulo,

Max(CantidadCons) as PrimeraMatPrima,

ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodArticulo) as NombreArticulo,

CodigoComponente as CodComponente

resident LISTAMAT where TipoCoste='MAT PRIMA' group by CodArticulo,CodigoComponente;

Correcting:

Load

*,

ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodComponente) as NombreComponente

;

Load

CodArticulo as CodigoArticulo,

Max(CantidadCons) as PrimeraMatPrima,

ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodArticulo) as NombreArticulo,

CodigoComponente as CodComponente

resident LISTAMAT where TipoCoste='MAT PRIMA'

group by CodArticulo,CodigoComponente;



Not applicable

Uso del group by

No funciona Fábio sigue sin agruparme por el codArticulo, es que el gruop by debería ser excluyente, es decir, si agrupo por codArticulo y por CodigoComponente debería salirme una artículo con su componente que sea MAT PRIMA y que cumpla Max(CantidadCons) y sin embargo lo que me aparece es el artículo repetido tantas veces como componentes son MAT PRIMA, pero a la condición Max(CatidadCons) ni caso. Creo que la única solución va a ser hacerlo en SQL puro y duro volviendo a extraer los datos de la base de datos.

Muchas gracias de todas formas Fábio!!

Not applicable

Uso del group by

Soy neófito en qlikview pero creo que si sólo necesitas el artículo con mayor cantidad creo que no necesitas la agrupación por CodigoComponente y esto debiera bastar:

Load CodArticulo as CodigoArticulo,

Max(CantidadCons) as PrimeraMatPrima,

ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodArticulo) as NombreArticulo

resident LISTAMAT where TipoCoste='MAT PRIMA' group by CodArticulo;

Si posteriormente necesitases el dato de CodigoComponente podrías hacer un inner join a la tabla LISTAMAT antes de hacer un drop table.

Saludos!

Not applicable

Uso del group by

Pero es que lo que yo necesito saber es para cada artículo, de todos los componentes que lo componen, el de mayor cantidad, por eso tengo que agrupar también por código de componente.

Muchas gracias de todos modos, Saludos!!

hector
Valued Contributor

Uso del group by

Hola, porque no pruebas esto


Load
CodArticulo as CodigoArticulo,
NombreArticulo,
Max(CantidadCons) as PrimeraMatPrima,
group by
CodArticulo,
NombreArticulo
;
Load
CodArticulo.
CantidadCons,
ApplyMap('COMPONENTE', $(sIdEmp)&':'&CodArticulo) as NombreArticulo
resident LISTAMAT where TipoCoste='MAT PRIMA' ;


Tambien podrias haber probado agrupar por el applymap(), pero creo que seria un desgaste de recursos

Saludos

Not applicable

Uso del group by

Es que tengo que agrupar también por código de componente, que en definitiva es lo que yo quiero, el componente que compone en mayor cantidad a un artículo. En SQL se hace fácilmente porque el group by es excluyente, pero por lo que he podido comprobar el group by de qlikview no.

Muchas gracias de todos modos Héctor!

Not applicable

Uso del group by

Te pongo una hipótesis de datos:

NombreArticuloCodComponenteCantidadCons
AA110
AA120
AA130
AA240
AA250
BB160
BB170
BB280
BB290
BB210
CC11
CC12
CC23
CC24
CC15



Con este código:

TAB1:
Load NombreArticulo,
MAX(CantidadCons) as CantidadCons
FROM Datos.xls (biff, embedded labels, table is [Hoja1$])
GROUP BY NombreArticulo, CantidadCons;

INNER JOIN (TAB1)
LOAD MAX(CantidadCons) as CantidadCons,
NombreArticulo,
CodComponente
FROM Datos.xls (biff, embedded labels, table is [Hoja1$])
GROUP BY NombreArticulo, CodComponente;

Quedaría algo así:

NombreArticuloCodComponenteCantidadCons
AA130
AA250
BB170
BB290
CC15
CC24

Falta la parte de TipoCoste='MAT PRIMA' pero eso te lo dejo a ti, espero que por lo demás fuera eso lo que necesitabas, cada artículo y componente con la cantidad máxima en CantidadCons.

Saludos

Not applicable

Uso del group by

Es que el problema es que lo que necesito es que cada artículo aparezca sólo una vez con su componente que lo compone en mayor cantidad, tendría que quedar así:

A A2 50

B B2 90

C C1 5

saludos!

Community Browser