TUTORIEL · QLIK SENSE
KEEP dans Qlik Sense
INNER, LEFT ou RIGHT : voyez quelles lignes sont conservées dans chaque table et comprenez enfin la différence entre KEEP et JOIN.
Comprendre KEEP dans Qlik
KEEP compare deux tables à partir de leurs champs communs et réduit les données selon les correspondances, sans fusionner les tables.
KEEP doit être précédé de INNER, LEFT ou RIGHT.
Exemple
▦CLIENTSID_CLIENT · NOM_CLIENT
KEEP
▦COMMANDESID_CLIENT · ID_COMMANDE
↓
CLIENTSreste une table
COMMANDESreste une table
L’image mentale JOIN fusionne. KEEP sélectionne les lignes à conserver mais garde les tables séparées.
| JOIN | fusionne les tables |
|---|---|
| KEEP | conserve deux tables distinctes |
| Comparaison | sur tous les champs communs |
| Variantes | INNER · LEFT · RIGHT |
Nos deux tables de départ
Nous allons conserver les mêmes données pendant tout le tutoriel afin de voir précisément l’effet de chaque KEEP.
Ces deux valeurs sans correspondance vont rendre les différences entre INNER, LEFT et RIGHT KEEP très visibles.
Exemple
| ID_CLIENT | NOM_CLIENT |
|---|---|
| C001 | Martin |
| C002 | Durand |
| C003 | Bernard |
| ID_COMMANDE | ID_CLIENT |
|---|---|
| CMD01 | C001 |
| CMD02 | C001 |
| CMD03 | C002 |
| CMD04 | C004 |
C003 : client sans commande C004 : commande sans client correspondant
| Champ commun | ID_CLIENT |
|---|---|
| Clés communes | C001 et C002 |
| C003 | CLIENTS seulement |
| C004 | COMMANDES seulement |
INNER KEEP : réduire les deux côtés
INNER KEEP correspond à l’idée la plus proche d’une intersection : les deux tables sont réduites aux valeurs de clé présentes des deux côtés.
INNER KEEP = intersection des correspondances, mais toujours deux tables.
Exemple
CLIENTS:
LOAD ID_CLIENT, NOM_CLIENT
FROM [lib://Donnees/CLIENTS.qvd] (qvd);
COMMANDES:
INNER KEEP (CLIENTS)
LOAD ID_COMMANDE, ID_CLIENT
FROM [lib://Donnees/COMMANDES.qvd] (qvd);
▦ CLIENTS après INNER KEEP
| ID_CLIENT | NOM_CLIENT |
|---|---|
| C001 | Martin |
| C002 | Durand |
| ID_COMMANDE | ID_CLIENT |
|---|---|
| CMD01 | C001 |
| CMD02 | C001 |
| CMD03 | C002 |
INNER KEEPréduit CLIENTS et COMMANDES aux clés communes.
| CLIENTS | C001 · C002 |
|---|---|
| COMMANDES | commandes de C001 · C002 |
| C003 | retiré |
| C004 | retiré |
LEFT KEEP : conserver la première table
LEFT KEEP conserve la première table et réduit la seconde aux valeurs qui trouvent une correspondance dans la première.
Pensez LEFT : la première table constitue le côté que l’on préserve.
Exemple
CLIENTS:
LOAD ID_CLIENT, NOM_CLIENT
FROM [lib://Donnees/CLIENTS.qvd] (qvd);
COMMANDES:
LEFT KEEP (CLIENTS)
LOAD ID_COMMANDE, ID_CLIENT
FROM [lib://Donnees/COMMANDES.qvd] (qvd);
▦ CLIENTS — conservée
| ID_CLIENT | NOM_CLIENT |
|---|---|
| C001 | Martin |
| C002 | Durand |
| C003 | Bernard |
| ID_COMMANDE | ID_CLIENT |
|---|---|
| CMD01 | C001 |
| CMD02 | C001 |
| CMD03 | C002 |
LEFT KEEPgarde la table de gauche et réduit l’autre.
| CLIENTS | reste intacte |
|---|---|
| C003 | reste présent |
| COMMANDES | est réduite |
| CMD04 / C004 | est retirée |
RIGHT KEEP : conserver la seconde table
RIGHT KEEP applique la logique inverse : la table chargée avec KEEP est conservée et la première table est réduite à ses correspondances.
RIGHT KEEP devient beaucoup plus simple à comprendre lorsque l’on regarde quelle table reste intacte.
Exemple
CLIENTS:
LOAD ID_CLIENT, NOM_CLIENT
FROM [lib://Donnees/CLIENTS.qvd] (qvd);
COMMANDES:
RIGHT KEEP (CLIENTS)
LOAD ID_COMMANDE, ID_CLIENT
FROM [lib://Donnees/COMMANDES.qvd] (qvd);
▦ CLIENTS — réduite
| ID_CLIENT | NOM_CLIENT |
|---|---|
| C001 | Martin |
| C002 | Durand |
| ID_COMMANDE | ID_CLIENT |
|---|---|
| CMD01 | C001 |
| CMD02 | C001 |
| CMD03 | C002 |
| CMD04 | C004 |
RIGHT KEEPgarde la table entrante et réduit la première.
| COMMANDES | reste intacte |
|---|---|
| CMD04 / C004 | reste présente |
| CLIENTS | est réduite |
| C003 | est retiré |
INNER, LEFT et RIGHT en un coup d’œil
Avec les mêmes données, la différence entre les trois variantes tient simplement au côté que KEEP doit préserver.
C’est ce tableau mental qu’il faut retenir avant tout le reste.
Exemple
INNER KEEP Les deux sont réduites
CLIENTS : C001 · C002
COMMANDES : C001 · C001 · C002
LEFT KEEP CLIENTS est préservée
CLIENTS : C001 · C002 · C003
COMMANDES : C001 · C001 · C002
RIGHT KEEP COMMANDES est préservée
CLIENTS : C001 · C002
COMMANDES : C001 · C001 · C002 · C004
Le moyen mnémotechnique INNER → les deux sont réduites LEFT → la première reste entière RIGHT → la seconde reste entière
| INNER | réduit les deux tables |
|---|---|
| LEFT | préserve la première |
| RIGHT | préserve la seconde |
| Dans les 3 cas | deux tables distinctes |
KEEP ou JOIN ?
KEEP et JOIN utilisent une logique de correspondance comparable, mais leur résultat dans le modèle Qlik est fondamentalement différent.
Si votre objectif est uniquement de limiter les données selon leurs correspondances, demandez-vous si une fusion par JOIN est réellement nécessaire.
Exemple
INNER JOIN
CLIENTS + COMMANDES
↓
1 tableID_CLIENT · NOM_CLIENT · ID_COMMANDE
✂ INNER KEEP
CLIENTS ∩ COMMANDES
↓
2 tablesréduites mais séparées
| JOIN | fusion |
|---|---|
| KEEP | réduction |
| JOIN | une table résultante |
| KEEP | deux tables associées |
Quand utiliser KEEP ?
KEEP est pertinent lorsque vous souhaitez limiter les lignes chargées selon les correspondances entre deux ensembles tout en conservant les tables séparées.
Le bon choix n’est pas le plus sophistiqué : c’est celui qui traduit le plus clairement le modèle dont vous avez besoin.
Exemple
Association simple
Je veux conserver les deux tables complètes et les relier.
→ Association Qlik✂ Réduire sans fusionner
Je veux limiter une ou deux tables selon leurs correspondances.
→ KEEPFusion réelle
Je veux obtenir une seule table contenant les champs des deux sources.
→ JOINAvant d’écrire KEEP
- Quels sont exactement les champs communs ?
- Dois-je réduire une seule table ou les deux ?
- Quelle table doit rester intacte ?
- Ai-je besoin de deux tables séparées à la fin ?
| Tables complètes | association |
|---|---|
| Réduction sans fusion | KEEP |
| Fusion | JOIN |
| Réflexe | identifier le besoin avant la syntaxe |