Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour à tous,
Je possède deux tables comme il suit :
Table 1
MATRICULE_S | MATRICULE_C | DD | DF |
---|---|---|---|
001 | C002 | 01/02/2016 | 06/02/2016 |
001 | C003 | 10/02/2016 | 10/02/2016 |
002 | C004 | 15/12/2016 | 16/12/2016 |
Table 2
MATRICULE_S | DATE |
---|---|
001 | 01/02/2016 |
001 | 02/02/2016 |
001 | 03/02/2016 |
001 | 04/02/2016 |
001 | 05/02/2016 |
001 | 06/02/2016 |
001 | 10/02/2016 |
002 | 15/12/2016 |
002 | 16/12/2016 |
Je dois ajouter le MATRICULE_C dans la table 2 devant chaque ligne correspondante pour obtenir ce type de résultat :
MATRICULE_S | DATE | MATRICULE_C |
---|---|---|
001 | 01/02/2016 | C002 |
001 | 02/02/2016 | C002 |
001 | 03/02/2016 | C002 |
001 | 04/02/2016 | C002 |
001 | 05/02/2016 | C002 |
001 | 06/02/2016 | C002 |
001 | 10/02/2016 | C003 |
002 | 15/12/2016 | C003 |
002 | 16/12/2016 | C004 |
J'ai la logique en tête, c'est à dire avoir ce type d'expression :
Si Table1.MATRICULE_S = Table2.MATRICULE_S, alors si DD <= DATE et DF >= DATE, j'insère le MATRICULE_C correspondant.
En fait c'est une recherche multicritère mais je ne connais pas les expressions de Qlik qui permettraient de le faire dans une application, si cela est possible.
Auriez-vous un début de piste en ce sens ?
Sardaucar
Pour arriver à ce que tu veux :
il faut exécuter le script suivant :
SET DateFormat='DD/MM/YYYY';
Table1:
LOAD MATRICULE_S,
MATRICULE_C,
DD,
DF
FROM
[https://community.qlik.com/message/1221510?et=watches.email.thread#1221510]
(html, codepage is 1252, embedded labels, table is @1);
Table2:
LOAD MATRICULE_S,
DATE
FROM
[https://community.qlik.com/message/1221510?et=watches.email.thread#1221510]
(html, codepage is 1252, embedded labels, table is @2);
Left Join(Table1)
IntervalMatch(DATE, MATRICULE_S)
LOAD
DD, DF, MATRICULE_S
Resident Table1;
Left Join(Table2)
LOAD
MATRICULE_S, DATE,
MATRICULE_C
Resident Table1;
DROP Table Table1;
Bonjour
Peut être quelque-chose comme ça :
Table1:
Load
MATRICULE_S,
MATRICULE_C,
DD,
DF
Résident table1;
Final:
Load
MATRICULE_S,
Date( DD + IterNo() - 1) as Date,
MATRICULE_C,
Resident Temp
While IterNo() <=DF -DD +1;
Pour arriver à ce que tu veux :
il faut exécuter le script suivant :
SET DateFormat='DD/MM/YYYY';
Table1:
LOAD MATRICULE_S,
MATRICULE_C,
DD,
DF
FROM
[https://community.qlik.com/message/1221510?et=watches.email.thread#1221510]
(html, codepage is 1252, embedded labels, table is @1);
Table2:
LOAD MATRICULE_S,
DATE
FROM
[https://community.qlik.com/message/1221510?et=watches.email.thread#1221510]
(html, codepage is 1252, embedded labels, table is @2);
Left Join(Table1)
IntervalMatch(DATE, MATRICULE_S)
LOAD
DD, DF, MATRICULE_S
Resident Table1;
Left Join(Table2)
LOAD
MATRICULE_S, DATE,
MATRICULE_C
Resident Table1;
DROP Table Table1;
Super ça fonctionne parfaitement ! La boucle aussi, mais le chargement est moins optimisé avec une boucle qu'une jointure gauche .