Le préfixe join permet de joindre la table chargée à une table nommée existante ou à la dernière table de données créée.
La jointure des données a pour effet d'ajouter au tableau cible un ensemble supplémentaire de champs ou d'attributs, à savoir, ceux qui ne sont pas déjà présents dans le tableau cible. Tous les noms de champ communs entre le jeu de données source et le tableau cible sont utilisés pour déterminer comment associer les nouveaux enregistrements entrants. C'est ce qu'on appelle communément une « jointure naturelle ». Une opération de jointure Qlik peut réduire ou augmenter le nombre d'enregistrements de la table cible obtenue par rapport à la table de départ, suivant le caractère unique de l'association de jointure et le type de jointure utilisé.
Types de jointures
Il existe quatre types de jointures :
Jointure gauche
Jointure interne
Jointure externe
Jointure droite
Exemples d'ensembles de résultats de différents types d'opérations de jointure
Jointure gauche
Les jointures Left join (jointures à gauche) constituent le type de jointure le plus courant. Par exemple, si vous avez un jeu de données de transaction et si vous souhaitez le combiner avec un jeu de données de référence, vous utiliserez généralement une jointure Left Join. Vous devez d'abord charger la table de transactions, puis charger le jeu de données de référence tout en le joignant via un préfixe Left Join à la table de transactions déjà chargée. Une jointure Left Join conserverait toutes les transactions telles quelles et ajouterait les champs de données de référence supplémentaires lorsqu'une correspondance est trouvée.
Jointure gauche
Jointure interne
Lorsque vous avez deux jeux de données pour lesquels vous ne vous souciez que des résultats où il existe une association correspondante, envisagez d'utiliser une jointure Inner Join. Cela éliminera tous les enregistrements des données source chargées et de la table cible si aucune correspondance n'est trouvée. Par conséquent, cela peut aboutir à une table cible contenant moins d'enregistrements qu'avant l'opération de jointure.
Jointure interne
Jointure externe (par défaut)
Lorsque vous devez conserver à la fois les enregistrements cible et tous les enregistrements entrants, utilisez une jointure Outer Join. Lorsqu'aucune correspondance n'est trouvée, chaque ensemble d'enregistrements est conservé, tandis que les champs du côté opposé de la jointure resteront vides (null).
Si le mot-clé de type est omis, le type de jointure par défaut est une jointure externe (Outer join).
Jointure externe
Jointure droite
Ce type de jointure conserve tous les enregistrements sur le point d'être chargés, tout en réduisant les enregistrements de la table ciblée par la jointure aux seuls enregistrements pour lesquels il existe une correspondance d'association dans les enregistrements entrants. Il s'agit d'une jointure de type niche parfois utilisée pour réduire une table d'enregistrements déjà préchargée à un sous-ensemble requis.
Jointure droite
Jointure croisée
Note InformationsS'il n'existe pas de noms de champ en commun entre la source et la cible d'une opération de jointure, la jointure se traduira par un produit cartésien de toutes les lignes – c'est ce qu'on appelle une « jointure croisée » (cross join).
Exemple d'ensemble de résultats d'une opération « cross join »
Syntaxe et arguments
[inner | outer | left | right ]Join[ (tablename )
]( loadstatement | selectstatement )
Arguments
Argument
Description
tablename
Table nommée à comparer à la table chargée.
loadstatementou selectstatement
Instruction LOAD ou SELECT de la table chargée.
Rubriques connexes
Ces rubriques peuvent vous aider à utiliser cette fonction :
Le préfixe de chargement Keep est similaire au préfixe Join, mais il ne combine pas les jeux de données source et cible. Au lieu de cela, il rogne chaque jeu de données en fonction du type d'opération adopté (inner, outer, left ou right).
Exemples de script de chargement - Jointure gauche
Une jointure gauche conserve tous les enregistrements de votre tableau principal (cible) et ajoute les données correspondantes d'un deuxième tableau (source). S'il n'existe pas de correspondance dans la source, l'enregistrement du tableau principal continue d'apparaître, mais avec des champs vides du tableau source.
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
Script de chargement
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Left Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Cet exemple démontre la sortie Left Join, dans laquelle seules les valeurs présentes dans le premier tableau (gauche) sont jointes.
Vue d'ensemble
Supposons que vous ayez une liste de commandes, mais que toutes les commandes n'aient pas d'enregistrement client correspondant.
Script de chargement
Orders:
Load * inline [
OrderID, CustomerID, Amount
1, 101, 200
2, 102, 150
3, 104, 400
];
Customers:
Left Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Résultats
Si vous développez la fenêtre d'aperçu dans le visionneur de modèle de données, vous verrez une partie de l'ensemble de résultats complet organisée dans un tableau :
Aperçu du tableau dans le visionneur de modèle de données
OrderID
CustomerID
Amount
Nom
1
101
200
Alice
2
102
150
Bob
3
104
400
-
Les OrderID 1 et 2 ont des clients correspondants. L'OrderID 3 n'a pas de client correspondant, raison pour laquelle Name est vide.
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.
Le script de chargement contient :
Jeu de données représentant des enregistrements de modification, chargé dans une table nommée Changes. Il inclut un champ clé Status ID.
Deuxième jeu de données représentant les statuts de modification, chargé et combiné avec les enregistrements de modification d'origine en le joignant avec un préfixe de chargement Left Join.
Cette jointure Left Join garantit que les enregistrements de modification restent intacts lors de l'ajout d'attributs de statut lorsqu'une correspondance dans les enregistrements de statut entrants est trouvée en fonction d'un Status ID commun.
Script de chargement
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Status:
Left Join (Changes)
Load * inline [
Status ID Status Sub Status
1 Open Not Started
2 Open Started
3 Closed Completed
4 Closed Cancelled
5 Closed Obsolete
] (delimiter is '\t');
Résultats
Ouvrez le visionneur de modèle de données et notez la forme du modèle de données. Un seul tableau dénormalisé est présent. Il s'agit d'une combinaison de tous les enregistrements de modification d'origine, avec les attributs de statut correspondants joints à chaque enregistrement de modification.
Modèle de données interne obtenu
Modifications
Change ID
Status ID
Scheduled Start Date
Scheduled End Date
Business Impact
Statut
Sub Status
Si vous développez la fenêtre d'aperçu dans le visionneur de modèle de données, vous verrez une partie de cet ensemble de résultats complet organisé dans un tableau :
Aperçu du tableau Changes dans le visionneur de modèle de données
Change ID
Status ID
Scheduled Start Date
Scheduled End Date
Business Impact
Statut
Sub Status
10030
4
19/01/2022
23/02/2022
Aucun
Closed
Cancelled
10031
3
20/01/2022
25/03/2022
Basse
Fermé
Completed
10015
3
04/01/2022
15/02/2022
Low
Fermé
Completed
10103
1
02/04/2022
29/05/2022
Moyenne
Ouvrir
Not Started
10116
1
15/04/2022
24/04/2022
Aucun
Ouvrir
Not Started
10134
1
03/05/2022
08/07/2022
Basse
Ouvrir
Not Started
10264
1
10/09/2022
17/10/2022
Moyenne
Ouvrir
Not Started
10040
1
29/01/2022
22/04/2022
Aucun
Ouvrir
Not Started
10323
1
08/11/2022
26/11/2022
High
Ouvrir
Not Started
10187
2
25/06/2022
24/08/2022
Basse
Ouvrir
Started
10185
2
23/06/2022
08/09/2022
Aucun
Ouvrir
Started
10220
2
28/07/2022
06/09/2022
Aucun
Ouvrir
Started
10326
2
11/11/2022
05/12/2022
Aucun
Ouvrir
Started
10138
2
07/05/2022
03/08/2022
Aucun
Ouvrir
Started
10334
2
19/11/2022
06/02/2023
Basse
Ouvrir
Started
Étant donné que la cinquième ligne de la table Status (Status ID : '5', Status : 'Closed', Sub Status : 'Obsolete') ne correspond à aucun des enregistrements de la table Changes, les informations de cette ligne n'apparaissent pas dans l'ensemble de résultats ci-dessus.
Revenez à l'éditeur de chargement de données. Chargez les données et ouvrez une feuille. Créez une table et ajoutez ce champ comme dimension : Status.
Ajoutez cette mesure :
=Count([Change ID])
Vous pouvez maintenant inspecter le nombre de modifications (Changes) par statut (Status).
Tableau de résultats
Statut
=Count([Change ID])
Ouvrir
12
Fermé
3
Exemples de script de chargement - Jointure interne
Une jointure interne ne conserve que les enregistrements qui existent dans les deux tableaux (en fonction des valeurs de champ correspondantes).
Script de chargement
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Inner Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Cet exemple démontre la sortie Inner Join, dans laquelle seules les valeurs présentes à la fois dans le premier tableau (gauche) et le deuxième tableau (droit) sont jointes.
Vue d'ensemble
Vous avez des commandes et une liste de commandes expédiées. Vous ne voulez que les commandes qui ont été expédiées.
Si vous développez la fenêtre d'aperçu dans le visionneur de modèle de données, vous verrez une partie de l'ensemble de résultats complet organisée dans un tableau :
Aperçu du tableau dans le visionneur de modèle de données
OrderID
Amount
ShipDate
2
150
2022-05-01
3
400
2022-05-02
Seuls les OrderID 2 et 3 apparaissent, car ils existent dans les deux tableaux.
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.
Le script de chargement contient :
Jeu de données représentant des enregistrements de modification, chargé dans une table nommée Changes.
Deuxième jeu de données représentant les enregistrements de modification provenant du système source JIRA. Cet ensemble est chargé et combiné avec les enregistrements d'origine en le joignant avec un préfixe de chargement Inner Join.
Cette jointure Inner Join garantit que seuls les cinq enregistrements de modification trouvés dans les deux jeux de données sont conservés.
Script de chargement
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
JIRA_changes:
Inner Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10000 JIRA
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
20000 TFS
] (delimiter is '\t');
Résultats
Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :
Source System
Change ID
Business Impact
Vous pouvez maintenant inspecter les cinq enregistrements obtenus. Le tableau obtenu d'une fonction Inner Join inclura uniquement les enregistrements avec des informations correspondantes dans les deux jeux de données.
Tableau de résultats
Source System
Change ID
Business Impact
JIRA
10030
Aucun
JIRA
10134
Basse
JIRA
10220
Aucun
JIRA
10323
Élevée
JIRA
10334
Basse
Exemples de script de chargement - Jointure externe
Une jointure externe conserve tous les enregistrements des deux tableaux. En l'absence de correspondance, les champs sont laissés vides.
Script de chargement
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Outer Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Dans cet exemple, les deux tableaux, Table1 et Table2, sont fusionnés en un seul tableau intitulé Table1. Dans les cas comme celui-ci, le préfixe outer est souvent utilisé pour joindre plusieurs tableaux en un seul tableau afin d'effectuer des agrégations sur les valeurs d'un seul tableau.
Vue d'ensemble
Vous souhaitez une liste complète de l'ensemble des clients et commandes, même si certains clients n'ont pas de commandes et que certaines commandes n'ont pas d'enregistrement client.
Script de chargement
Orders:
Load * inline [
OrderID, CustomerID
1, 101
2, 102
3, 104
];
Customers:
Outer Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Résultats
Si vous développez la fenêtre d'aperçu dans le visionneur de modèle de données, vous verrez une partie de cet ensemble de résultats complet organisé dans un tableau :
Aperçu du tableau dans le visionneur de modèle de données
OrderID
CustomerID
Name
1
101
Alice
2
102
Bob
3
104
-
-
103
Carol
L'OrderID 3 n'a pas de client correspondant (Name vide).
Le CustomerID 103 (Carol) n'a pas de commande correspondante (OrderID vide).
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.
Le script de chargement contient :
Jeu de données représentant des enregistrements de modification, chargé dans une table nommée Changes.
Deuxième jeu de données représentant les enregistrements de modification provenant du système source JIRA. Cet ensemble est chargé et combiné avec les enregistrements d'origine en le joignant avec un préfixe de chargement Outer Join.
Cela garantit que tous les enregistrements de modification qui se chevauchent des deux jeux de données sont conservés.
Script de chargement
// 8 Change records
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
] (delimiter is '\t');
// 6 Change records
JIRA_changes:
Outer Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
10597 JIRA
] (delimiter is '\t');
Résultats
Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :
Source System
Change ID
Business Impact
Vous pouvez maintenant inspecter les dix enregistrements obtenus.
Tableau de résultats
Source System
Change ID
Business Impact
JIRA
10030
Aucun
JIRA
10134
Basse
JIRA
10220
Aucun
JIRA
10323
-
JIRA
10334
Basse
JIRA
10597
-
-
10015
Basse
-
10031
Basse
-
10040
Aucun
-
10138
Aucun
Exemples de script de chargement - Jointure droite
Une jointure droite conserve tous les enregistrements du tableau source et ajoute les informations correspondantes du tableau cible. Si le tableau cible n'a pas de correspondance, ses champs sont vides.
Script de chargement
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Right Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Cet exemple démontre la sortie Right Join, dans laquelle seules les valeurs présentes dans le deuxième tableau (droit) sont jointes.
Vue d'ensemble
Votre tableau source est une liste de clients ; vous voulez tous les clients, plus toutes les commandes correspondantes.
Script de chargement
Orders:
Load * inline [
OrderID, CustomerID
1, 101
2, 102
3, 104
];
Customers:
Right Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Résultats
Si vous développez la fenêtre d'aperçu dans le visionneur de modèle de données, vous verrez une partie de cet ensemble de résultats complet organisé dans un tableau :
Aperçu du tableau dans le visionneur de modèle de données
CustomerID
Name
OrderID
101
Alice
1
102
Bob
2
103
Carol
-
Tous les clients apparaissent. Carol n'a pas de commandes (OrderID vide).
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.
Le script de chargement contient :
Jeu de données représentant des enregistrements de modification, chargé dans une table nommée Changes.
Deuxième jeu de données représentant des enregistrements de modification provenant du système source Teamwork. Ces enregistrements sont chargés et combinés avec les enregistrements d'origine en les joignant avec un préfixe de chargement Right Join.
Cela garantit que seuls les enregistrements de modification Teamwork sont conservés, sans perdre aucun enregistrement Teamwork si la table cible n'a pas de valeur Change ID correspondante.
Script de chargement
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Teamwork_changes:
Right Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10040 Teamwork
10015 Teamwork
10103 Teamwork
10031 Teamwork
50231 Teamwork
] (delimiter is '\t');
Résultats
Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :
Source System
Change ID
Business Impact
Vous pouvez maintenant inspecter les cinq enregistrements obtenus.
Tableau de résultats
Source System
Change ID
Business Impact
Teamwork
10015
Basse
Teamwork
10031
Basse
Teamwork
10040
Aucun
Teamwork
10103
Medium
Teamwork
50231
-
Dépannage - Jointure croisée
Vue d'ensemble
Si vous joignez deux tableaux sans noms de champ correspondants, chaque ligne du premier tableau sera combinée avec chaque ligne du deuxième — produisant potentiellement un nombre considérable d'enregistrements (un produit cartésien) et entraînant des associations de données inattendues.
Si vous développez la fenêtre d'aperçu dans le visionneur de modèle de données, vous verrez une partie de cet ensemble de résultats complet organisé dans un tableau :
Aperçu du tableau dans le visionneur de modèle de données
A_ID
ValueA
B_ID
ValueB
1
foo
10
baz
1
foo
11
qux
2
bar
10
baz
2
bar
11
qux
Chaque A_ID est associé à chaque B_ID (total 4 lignes).
Note ConseilVérifiez toujours que vos noms de champ correspondent comme prévu avant d'exécuter une jointure.
Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.