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: 
Not applicable

How to make 2 group by? (¿Cómo hacer 2 group by?)

Hello everyone, I'm new in QlikView, I read the tutorial this there are the web but is too basic in my opinion, and I find sources which explain more things about queries and selections, as well as terms and nomenclature used QlikView . So I ask this question to see if anyone can help.

I have two .csv files (tabal1.csv and tabla2.csv) and that's where will upload the tables, let 'Table1' and 'Table 2'. These tables have many columns each, but I will give an example of what I do. Suppose we are interested in each table the following columns connected by the 'ID' column:

Table 1:

ID Tech Site

1 4G if

2 3G if

3 3G not

4 2G not

5 2G if

Table 2:

ID Vo1 Vo2

1 10 0

2 0 67

March 3 34

4 4 0

5 0 0

Note: You can not have a row with 4G and Site Tech = = 'no', provided that Tech is 4G, Site will be 'yes'.

What I get is: Sum (Vo1 + Vo2) and grouped by Site Tech (which is not the best order), but only Tech group 2G and 3G, 4G no. Therefore, the result table should look like:

Agrupacion Total (Sum (Vo1 + Vo2))

4G (if) 10

3G-2G (if) 67

3G-2G (no) 41

No I have come to explain properly, anything you can ask me. The main problem is I do not know the nomenclature (syntax) using QlikView, so do not even know how to start loading only those columns that interest me, and not load the entire tables ...

Thank you very much in advance and I hope your answers !!

Greetings to all !!!!

Translated with Google Translate - Qlik Community Administrative Team

Hola a todos, soy nuevo en QlikView, me leí el tutorial este que hay por la web pero es demasiado básico en mi opinión, y no encuentro fuentes donde expliquen más cosas acerca de consultas y selecciones, así como expresiones y la nomenclatura que utiliza QlikView. Por eso hago esta pregunta a ver si alguien puede ayudarme.

Yo tengo dos archivos .csv (tabal1.csv y tabla2.csv) y de ahí es de donde cargaré las tablas, supongamos 'Tabla1' y 'Tabla 2'. Estas tablas tienen muchas columnas cada una, pero voy a poner un ejemplo de lo que quiero hacer. Supongamos que de cada tabla nos interesan las siguientes columnas, conectadas por la columna 'ID':

Tabla1:

ID     Tech     Site

1      4G        si   

2      3G        si

3      3G        no

4      2G        no

5      2G        si

Tabla2:

ID     Vo1      Vo2

1      10         0

2      0           67

3      3           34

4      4           0

5      0           0

Nota: no puede haber una fila con Tech=4G y Site='no', siempre que Tech sea 4G, Site será 'sí'.

Lo que quiero obtener es: Sum(Vo1+Vo2) agrupado por Site y Tech (no se cual es el mejor orden), pero en Tech agrupar solo el 2G y el 3G, el 4G no. Por tanto, la tabla resultado debería quedar así:

Agrupacion     Total (Sum(Vo1+Vo2))

4G (si)            10

3G-2G (si)       67

3G-2G (no)      41

No se si he llegado a explicarme correctamente, cualquier cosa me podéis preguntar. El principal problema es que no conozco la nomenclatura (sintaxis) que utiliza QlikView, por eso no sé ni cómo empezar a cargar solo esas columnas que me interesan, y no cargar las tablas enteras...

Muchas gracias de antemano y espero vuestras respuestas!!

Un saludo a todos!!!!

1 Solution

Accepted Solutions
arthur_dom
Creator III
Creator III

Podria intentar con 'if' o con 'join'(y applymap...). no olvides que en Qlik  la acentuacion podría interferir, así como espacios(trim) y cajas(upper).

//Metodo if:

CGI:

LOAD CGI_ORIG,

     CELDA_ORIG,

     CGI,

     CELDA_NORM,

     NODO_NORM,

     SITE,

     INE_MUNICIPIO,

     [CODIGO POSTAL],

     MUNICIPIO,

     INE_PROVINCIA,

     PROVINCIA,

     TECNOLOGÍA,

     [letra tecn],

     [cosite 3G-4G],

     [BandaInf cos3G-4G],

     [4G+],

     proveedor,

    if(     upper(trim(TECNOLOGÍA)) = '4G' and upper(trim(  [cosite 3G-4G] )='SÍ ,

           '4G' ,

          if( upper(trim(TECNOLOGÍA)) <> '4G' and upper(trim(  [cosite 3G-4G] )='SÍ',

          '2G-3G cosites 4G',

          '2G-3G no-cosites 4G')                as Name1

FROM

CGIs_agregado*.csv

(txt, utf8, embedded labels, delimiter is ';', msq);   

//Metodo Left Join

left join(Tabla1)

load * Inline [TECNOLOGÍA, [cosite 3G-4G] , Name2

  4G, sí, 4G (si)

  3G, sí, 3g-2g (si)

  3G, no, 3g-2g(no)

  2G, sí, 3g-2g (si)

  2G, no, 3g-2g(no)];

View solution in original post

3 Replies
arthur_dom
Creator III
Creator III

Hola!

Tente con un join en script


left join(Tabla1)

load * Inline [Tech, Site, name

  4G, si, 4G (si)

  3G, si, 3g-2g (si)

  3G, no, 3g-2g(no)

  2G, si, 3g-2g (si)

  2G, no, 3g-2g(no)];


Screen Shot 2015-07-14 at 13.28.29.png

Not applicable
Author

Mañana en cuanto pueda en el trabajo lo pruebo! Muchísimas gracias! Ya te contaré...

EDITO: Funciona perfectamente!! Muchisimas gracias!

Por curiosidad, lo que haces es asignar etiquetas a los campos ¿no?

EDITO2: Cuando lo intento con las tablas reales, este método no devuelve los resultados que deberían salir, porque hay campos que son iguales, es decir, lo identificadores se repiten varias veces. Lo que estoy intentando es colocar las etiquetas del nuevo campo 'name' pero sin usar LOAD * INLINE, sino el LOAD FROM. Te dejo el código:

Directory;

CGI:

LOAD CGI_ORIG,

     CELDA_ORIG,

     CGI,

     CELDA_NORM,

     NODO_NORM,

     SITE,

     INE_MUNICIPIO,

     [CODIGO POSTAL],

     MUNICIPIO,

     INE_PROVINCIA,

     PROVINCIA,

     TECNOLOGÍA,

     [letra tecn],

     [cosite 3G-4G],

     [BandaInf cos3G-4G],

     [4G+],

     proveedor

FROM

CGIs_agregado*.csv

(txt, utf8, embedded labels, delimiter is ';', msq);    

    

/////////////////////////////////////////////////////    

//     [TECNOLOGÍA, cosite 3G-4G, name1

//     4G, sí, 4G

//     3G, sí, 2G-3G cosites 4G

//     3G, no, 2G-3G no-cosites 4G

//     2G, sí, 2G-3G cosites 4G

//     2G, no, 2G-3G no-cosites 4G]

/////////////////////////////////////////////////////

Outer Join (CGI)

RED:

LOAD CELDA as CGI,

     FECHA,

     VOL_DL,

     VOL_UL,

     DURACION,

     CNT_MSISDN

FROM

RED.csv

(txt, codepage is 1252, embedded labels, delimiter is '\t', msq);

El caso es que no se donde poner las etiquetas que me dijiste cuando hago los dos LOAD FROM...

arthur_dom
Creator III
Creator III

Podria intentar con 'if' o con 'join'(y applymap...). no olvides que en Qlik  la acentuacion podría interferir, así como espacios(trim) y cajas(upper).

//Metodo if:

CGI:

LOAD CGI_ORIG,

     CELDA_ORIG,

     CGI,

     CELDA_NORM,

     NODO_NORM,

     SITE,

     INE_MUNICIPIO,

     [CODIGO POSTAL],

     MUNICIPIO,

     INE_PROVINCIA,

     PROVINCIA,

     TECNOLOGÍA,

     [letra tecn],

     [cosite 3G-4G],

     [BandaInf cos3G-4G],

     [4G+],

     proveedor,

    if(     upper(trim(TECNOLOGÍA)) = '4G' and upper(trim(  [cosite 3G-4G] )='SÍ ,

           '4G' ,

          if( upper(trim(TECNOLOGÍA)) <> '4G' and upper(trim(  [cosite 3G-4G] )='SÍ',

          '2G-3G cosites 4G',

          '2G-3G no-cosites 4G')                as Name1

FROM

CGIs_agregado*.csv

(txt, utf8, embedded labels, delimiter is ';', msq);   

//Metodo Left Join

left join(Tabla1)

load * Inline [TECNOLOGÍA, [cosite 3G-4G] , Name2

  4G, sí, 4G (si)

  3G, sí, 3g-2g (si)

  3G, no, 3g-2g(no)

  2G, sí, 3g-2g (si)

  2G, no, 3g-2g(no)];