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

Comparaison de valeur entre lignes d'un load

Bonjour,

Encore débutant sur Qlikview, je ne sais pas si ce que je souhaite faire est possible, et si oui, comment le faire.

Il me faut comparer les lignes dans un load pour supprimer les doublons, suivants certaines conditions.

J'ai vu beaucoup d'exemples de comparaison entre ligne sur des tableaux, mais pas (encore) dans le load même.

Actuellement, pour ce faire, j'essaie la méthode suivante : construction de 3 tables, la seconde appelant la première, et la 3e la 2nde.

Les tables font plusieurs dizaines de millier de ligne et plusieurs dizaines de colonnes. Celles présentées ci-après le sont juste à titre d'exemple.

Ce sont les FieldValue qui semblent ne pas fonctionner, ce que je ne comprends pas.

Auriez-vous une idée ?

Table1 :

LOAD * inline [

Champ1  Champ2  Champ3  Champ4

A1            A2             A3           A4

B1            B2             B3           B4

]

;

Table2 :

LOAD *,

if (FieldValue([Champ1],RecNo()) = FieldValue([Champ1],RecNo()-1)

     and FieldValue([Champ2],RecNo()) <> FieldValue([Champ2],RecNo()-1)

     and FieldValue([Champ2],RecNo()-1) = '', 1, 2) as [aSupprimer]

Resident Table1

;

DROP Table Table1;

Table3 :

LOAD *

Resident Table2

where exists('aSupprimer',2)  //ceux marqués d'un 1 ne sont pas pris en compte

;

DROP Table Table2;

Merci pour toute réponse, et idée pouvant m'aider

Michaël

1 Solution

Accepted Solutions
hic
Former Employee
Former Employee

Par example:

Table1:
LOAD * inline [
Champ1,Champ2,Champ3,Champ4
A1,A2,A3,A4
B1,B2,B3,B4]
;

Table2:
LOAD *,
if(Champ1=Peek(Champ1) and Champ2<>Peek(Champ2)

   and Champ3= '', True(), False()) as [aSupprimer]
Resident Table1
Order By Champ1,Champ2,Champ3,Champ4;

Table3:
LOAD *
Resident Table2
where aSupprimer=2;  //ceux marqués d'un 1 ne sont pas pris en compte

DROP Table Table1, Table2;

HIC

View solution in original post

4 Replies
puttemans
Specialist
Specialist

Bonjour Michael,

Votre ligne de pensée me semble ok. Au lieu de 'fieldvalue', recherchez la fonction 'Peek'. Je suppose qu'avec elle, vous saurez faire ce que vous voulez.

Cdt,

Johan

hic
Former Employee
Former Employee

Par example:

Table1:
LOAD * inline [
Champ1,Champ2,Champ3,Champ4
A1,A2,A3,A4
B1,B2,B3,B4]
;

Table2:
LOAD *,
if(Champ1=Peek(Champ1) and Champ2<>Peek(Champ2)

   and Champ3= '', True(), False()) as [aSupprimer]
Resident Table1
Order By Champ1,Champ2,Champ3,Champ4;

Table3:
LOAD *
Resident Table2
where aSupprimer=2;  //ceux marqués d'un 1 ne sont pas pris en compte

DROP Table Table1, Table2;

HIC

Not applicable
Author

Merci beaucoup, c'est ce qui me manquait !

Not applicable
Author

Effectivement, ça a bien été le cas !