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

Création de champs dans le script d'ajout de données

Bonjour à tous,

Je possède deux tables comme il suit :

Table 1

MATRICULE_SMATRICULE_CDDDF
001C00201/02/201606/02/2016
001C00310/02/201610/02/2016
002C00415/12/201616/12/2016

Table 2

MATRICULE_SDATE
00101/02/2016
00102/02/2016
00103/02/2016
00104/02/2016
00105/02/2016
00106/02/2016
00110/02/2016
00215/12/2016
00216/12/2016

Je dois ajouter le MATRICULE_C dans la table 2 devant chaque ligne correspondante pour obtenir ce type de résultat :

MATRICULE_SDATEMATRICULE_C
00101/02/2016C002
00102/02/2016C002
00103/02/2016C002
00104/02/2016C002
00105/02/2016C002
00106/02/2016C002
00110/02/2016C003
00215/12/2016C003
00216/12/2016C004

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

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

Pour arriver à ce que tu veux :

Community_1221510.png

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;

View solution in original post

3 Replies
brunobertels
Master
Master

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;

sfatoux72
Partner - Specialist
Partner - Specialist

Pour arriver à ce que tu veux :

Community_1221510.png

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;

Not applicable
Author

Super ça fonctionne parfaitement ! La boucle aussi, mais le chargement est moins optimisé avec une boucle qu'une jointure gauche .