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.

C’est la différence fondamentale avec JOIN. JOIN produit une seule table. KEEP conserve deux tables distinctes dans le modèle associatif Qlik.

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.

JOINfusionne les tables
KEEPconserve deux tables distinctes
Comparaisonsur tous les champs communs
VariantesINNER · 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.

CLIENTS contient C001, C002 et C003. COMMANDES contient deux commandes pour C001, une pour C002 et une pour C004. C003 n’a donc aucune commande et C004 n’existe pas dans CLIENTS.

Ces deux valeurs sans correspondance vont rendre les différences entre INNER, LEFT et RIGHT KEEP très visibles.

Exemple

▦ CLIENTS.qvd
ID_CLIENTNOM_CLIENT
C001Martin
C002Durand
C003Bernard
▦ COMMANDES.qvd
ID_COMMANDEID_CLIENT
CMD01C001
CMD02C001
CMD03C002
CMD04C004

C003 : client sans commande C004 : commande sans client correspondant

Champ communID_CLIENT
Clés communesC001 et C002
C003CLIENTS seulement
C004COMMANDES 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.

C001 et C002 existent dans CLIENTS et COMMANDES : ils restent. C003 disparaît de CLIENTS et la commande de C004 disparaît de COMMANDES.

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_CLIENTNOM_CLIENT
C001Martin
C002Durand
▦ COMMANDES après INNER KEEP
ID_COMMANDEID_CLIENT
CMD01C001
CMD02C001
CMD03C002

INNER KEEPréduit CLIENTS et COMMANDES aux clés communes.

CLIENTSC001 · C002
COMMANDEScommandes de C001 · C002
C003retiré
C004retiré

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.

CLIENTS est notre première table : elle reste intacte, y compris C003. COMMANDES est réduite : la commande de C004 disparaît puisqu’aucun client C004 n’existe dans CLIENTS.

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_CLIENTNOM_CLIENT
C001Martin
C002Durand
C003Bernard
▦ COMMANDES — réduite
ID_COMMANDEID_CLIENT
CMD01C001
CMD02C001
CMD03C002

LEFT KEEPgarde la table de gauche et réduit l’autre.

CLIENTSreste intacte
C003reste présent
COMMANDESest réduite
CMD04 / C004est retirée

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.

INNER réduit les deux côtés. LEFT préserve la première table. RIGHT préserve la seconde. Aucun de ces traitements ne fusionne CLIENTS et COMMANDES.

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

INNERréduit les deux tables
LEFTpréserve la première
RIGHTpréserve la seconde
Dans les 3 casdeux 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.

JOIN rapproche les lignes puis fusionne les champs dans une table résultante. KEEP utilise les correspondances pour réduire les ensembles, puis laisse les deux tables séparées et associées par leurs champs communs.

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

JOINfusion
KEEPréduction
JOINune table résultante
KEEPdeux 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.

Il ne faut pas utiliser KEEP simplement parce qu’il existe. Une association Qlik naturelle suffit souvent lorsque vous n’avez pas besoin de réduire les données. KEEP devient intéressant lorsque cette réduction fait réellement partie du besoin.

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.

→ KEEP

Fusion réelle

Je veux obtenir une seule table contenant les champs des deux sources.

→ JOIN

Avant d’écrire KEEP

  1. Quels sont exactement les champs communs ?
  2. Dois-je réduire une seule table ou les deux ?
  3. Quelle table doit rester intacte ?
  4. Ai-je besoin de deux tables séparées à la fin ?

Tables complètesassociation
Réduction sans fusionKEEP
FusionJOIN
Réflexeidentifier le besoin avant la syntaxe