Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Group by pour organiser mes données ?

Bonjour à tous,

Débutante sur QlikView j'aurais besoin d'aide sur le point suivant :

J'ai une table dont la structure est :

TimeTag1Tag2
110-
1-30
220-
2-40

Je voudrais obtenir :

TimeTag1Tag2
11030
22040

Après avoir retourné le problème dans tous les sens, j'en arrive à la conclusion qu'il faudrait :

             1. Que je remplace les "-" par des 0

TimeTag1Tag2
1100
1030
2200
2040

            2. Que je me débrouille de faire une sorte de group by(Time) dans cette table en agrégeant sur

- sum(Tag1)

- sum(Tag2) (je n'ai jamais 2 valeurs de tag pour un même Time donc OK)

- sum(Tag1) + sum(Tag2)

Cela vous semble-t-il possible ? (j'espère que oui sinon tout mon projet est à revoir ... )

Mille mercis pour vos réponses.

Aude

1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

Salut,

Ne remplace pas les '-' par des '0'.

Il suffit de faire un join pour obtenir le résultat que tu cherches.

Soit Tab_tmp ta table initiale avec la structure que tu indique, alors fais:

Tab_tmp:

LOAD

Time,

Tag1,

Tag2,

Rowno() as Ligne // pense à rajouter cette table pour différencier celle-ci de la table resultat que tu auras

From

     // ta source

Tab:

LOAD

     Time,

     Tag1

Resident

     Tab_tmp

Where     Isnull(Tag1)=0 // condition a mettre si tu ne veux charger que lorsque Tag1 est non null

;

JOIN

(Tab)

LOAD

     Time,

     Tag2

Resident

     Tab_tmp

Where     Isnull(Tag2)=0 // condition a mettre si tu ne veux charger que lorsque Tag2 est non null

;

DROP TABLE Tab_tmp;

View solution in original post

8 Replies
Not applicable
Author

Bonjour,

il suffit de faire un join entre

T1:

noconcatenate

LOAD Time, Tag1 Resident T

join

LOAD Time, Tag2 Resident T

chris

Anonymous
Not applicable
Author

Salut,

Ne remplace pas les '-' par des '0'.

Il suffit de faire un join pour obtenir le résultat que tu cherches.

Soit Tab_tmp ta table initiale avec la structure que tu indique, alors fais:

Tab_tmp:

LOAD

Time,

Tag1,

Tag2,

Rowno() as Ligne // pense à rajouter cette table pour différencier celle-ci de la table resultat que tu auras

From

     // ta source

Tab:

LOAD

     Time,

     Tag1

Resident

     Tab_tmp

Where     Isnull(Tag1)=0 // condition a mettre si tu ne veux charger que lorsque Tag1 est non null

;

JOIN

(Tab)

LOAD

     Time,

     Tag2

Resident

     Tab_tmp

Where     Isnull(Tag2)=0 // condition a mettre si tu ne veux charger que lorsque Tag2 est non null

;

DROP TABLE Tab_tmp;

Not applicable
Author

Bonjour Christian,

Merci pour cette réponse (ultra) rapide qui m'aide bien (et me redonne espoir d'arriver au bout ...).

Maintenant j'ai :

Resultat.bmp

Il ne me reste plus qu'à trouver un moyen de ne garder que la ligne par Time qui m'intéresse. Si vous avez des idées c'est très volontier ...

Not applicable
Author

Bonjour Christian,

Merci pour cette réponse (ultra) rapide qui m'aide bien (et me redonne espoir d'arriver au bout ...).

Maintenant j'ai :

Resultat.bmp

Il ne me reste plus qu'à trouver un moyen de ne garder que la ligne par Time qui m'intéresse. Si vous avez des idées c'est très volontier ...

Not applicable
Author

Bonjour

il semble qu'il y ait un pb.

Selon les sources décrites en entrée le résultat devrait être correct avec 1 record Tag1 et Tag2 par Time et non celui présenté qui est multiple.

Puis-je avoir les sources?

christian

Not applicable
Author

J'ai testé avec ce code :

Test :
LOAD * INLINE [
    tps, T1, T2
    10, 111, 0 
    20, 222, 0 
    30, 333, 0 
    10, 0 , 444
    20, 0 , 555
    30, 0 , 666
]
;


Test3 :
noconcatenate
LOAD tps as Time, T1 as Tag1  Resident Test; // WHERE Isnull(T1)=0;
join
LOAD tps as Time, T2 as Tag2 Resident Test;

et le même sans les zéros. J'ai la même chose dans les 2 cas à affichage du zéro près..

Not applicable
Author

J'ai testé avec ce code :

Test :
LOAD * INLINE [
    tps, T1, T2
    10, 111, 0 
    20, 222, 0 
    30, 333, 0 
    10, 0 , 444
    20, 0 , 555
    30, 0 , 666
]
;


Test3 :
noconcatenate
LOAD tps as Time, T1 as Tag1  Resident Test; // WHERE Isnull(T1)=0;
join
LOAD tps as Time, T2 as Tag2 Resident Test;

et le même sans les zéros. J'ai la même chose dans les 2 cas à affichage du zéro près..

Not applicable
Author

Christian et Bobbyraj_sg,

Grâce à vos 2 réponses ça marche, merci beaucoup à tous les 2 !!!

J'ai plutôt chargé les données à partir d'excel pour simuler mes "-".

Au final le code correct est :

Test :
LOAD tps as Time,
     T1,
     T2
FROM

(biff, embedded labels, table is [Feuil1$]);


Test3 :
noconcatenate
LOAD Time, T1 as Tag1  Resident Test WHERE Isnull(T1)=0;
join
LOAD Time, T2 as Tag2 Resident Test WHERE Isnull(T2)=0;

Merci beaucoup pour votre réactivité à tous les 2. Vous m'avez bien aidé !!