Het prefix join koppelt de geladen tabel aan een bestaande benoemde tabel of de laatste eerder gemaakte gegevenstabel.
Het effect van het samenvoegen van gegevens is het uitbreiden van de doel-gegevenstabel met een extra set velden of kenmerken, namelijk die welke nog niet aanwezig zijn in de doel-gegevenstabel. Eventuele gemeenschappelijke veldnamen tussen de bron-gegevensverzameling en de doel-gegevenstabel worden gebruikt om te bepalen hoe de nieuwe inkomende records moeten worden gekoppeld. Dit wordt gewoonlijk een “natural join” genoemd. Een Qlik join-bewerking kan ertoe leiden dat de resulterende doel-gegevenstabel meer of minder records bevat dan waarmee werd begonnen, afhankelijk van de uniciteit van de join-koppeling en het type join dat wordt gebruikt.
Typen joins
Er zijn vier typen joins:
Left join
Inner join
Outer join
Right join
Voorbeeldresultaten van verschillende typen join-bewerkingen
Left join
Left joins zijn het meest voorkomende type join. Als u bijvoorbeeld een transactie-gegevensverzameling heeft en deze wilt combineren met een referentie-gegevensverzameling, gebruikt u doorgaans een Left Join. U laadt eerst de transactietabel en laadt vervolgens de referentie-gegevensverzameling terwijl u deze via een Left Join-voorvoegsel aan de reeds geladen transactietabel koppelt. Een Left Join behoudt alle transacties zoals ze zijn en voegt de aanvullende referentie-gegevensvelden toe waar een overeenkomst wordt gevonden.
Left join
Inner join
Wanneer u twee gegevensverzamelingen heeft waarbij u alleen geïnteresseerd bent in resultaten waar een overeenkomende koppeling bestaat, overweeg dan het gebruik van een Inner Join. Dit elimineert alle records uit zowel de geladen brongegevens als de doel-gegevenstabel als er geen overeenkomst wordt gevonden. Als gevolg hiervan kan uw doel-gegevenstabel minder records bevatten dan vóór de join-bewerking.
Inner join
Outer join (standaard)
Wanneer u zowel de doelrecords als alle inkomende records wilt behouden, gebruikt u een Outer Join. Waar geen overeenkomst wordt gevonden, blijft elke set records behouden, terwijl de velden aan de tegenovergestelde kant van de join oningevuld (null) blijven.
Als het type-trefwoord wordt weggelaten, is het standaard join-type een outer join.
Outer join
Right join
Dit join-type behoudt alle records die geladen gaan worden, terwijl de records in de tabel die door de join wordt getarget, worden verminderd tot alleen die records waarvoor een koppelingsmatch in de inkomende records bestaat. Dit is een niche join-type dat soms wordt gebruikt als middel om een reeds vooraf geladen tabel met records in te korten tot een vereiste subset.
Right join
Cross join
InformatieAls er geen veldnamen gemeenschappelijk zijn tussen de bron en het doel van een join-bewerking, resulteert de join in een cartesiaans product van alle rijen – dit wordt een “cross join” genoemd.
Voorbeeldresultaat van een "cross join"-bewerking
Syntaxis en argumenten
[inner | outer | left | right ]Join[ (tablename )
]( loadstatement | selectstatement )
Argumenten
Argument
Beschrijving
tablename
De benoemde tabel die moet worden vergeleken met de geladen tabel.
loadstatementof selectstatement
De LOAD of SELECT-opdracht voor de geladen tabel.
Gerelateerde onderwerpen
Deze onderwerpen kunnen u helpen bij het werken met deze functie:
Het Keep load-voorvoegsel is vergelijkbaar met het Join-voorvoegsel, maar het combineert de bron- en doel-gegevensverzamelingen niet. In plaats daarvan trimt het elke gegevensverzameling volgens het type bewerking dat is gekozen (inner, outer, left of right).
Load script-voorbeelden - Left join
Een left join behoudt alle records uit uw hoofd- (doel-) tabel en voegt overeenkomende gegevens uit een tweede (bron-) tabel toe. Als er geen overeenkomst in de bron is, verschijnt het record van de hoofdtabel nog steeds, maar met lege velden uit de brontabel.
Voeg het voorbeeldscript toe aan uw applicatie en voer het uit. Om het resultaat te zien, voegt u de velden die in de resultatenkolom staan toe aan een werkblad in uw applicatie.
Load script
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 ];
Dit voorbeeld demonstreert de Left Join-uitvoer waarbij alleen waarden die aanwezig zijn in de eerste (linker) tabel worden samengevoegd.
Overzicht
Stel dat u een lijst met orders heeft, maar niet alle orders hebben een overeenkomend klantrecord.
Load script
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
];
Resultaten
Als u het voorbeeldvenster in de Data model viewer uitvouwt, ziet u een deel van de volledige resultatenset georganiseerd in een tabel:
Voorbeeld van tabel in de Data model viewer
OrderID
CustomerID
Amount
Name
1
101
200
Alice
2
102
150
Bob
3
104
400
-
OrderID 1 en 2 hebben overeenkomende klanten.
OrderID 3 heeft geen overeenkomende klant, dus Name is leeg.
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een gegevensverzameling die wijzigingsrecords vertegenwoordigt, die wordt geladen in een tabel genaamd Changes. Deze bevat een Status ID-sleutelveld.
Een tweede gegevensverzameling die wijzigingsstatussen vertegenwoordigt, die wordt geladen en gecombineerd met de oorspronkelijke wijzigingsrecords door deze te koppelen met een left Join load-voorvoegsel.
Deze left join zorgt ervoor dat de wijzigingsrecords intact blijven terwijl statuskenmerken worden toegevoegd waar een overeenkomst in de inkomende statusrecords wordt gevonden op basis van een gemeenschappelijk Status ID.
Load script
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');
Resultaten
Open de Data model viewer en let op de vorm van het gegevensmodel. Er is slechts één denormaliseerde tabel aanwezig. Het is een combinatie van alle oorspronkelijke wijzigingsrecords, met de overeenkomende statuskenmerken gekoppeld aan elk wijzigingsrecord.
Resulterend intern gegevensmodel
Changes
Change ID
Status ID
Scheduled Start Date
Scheduled End Date
Business Impact
Status
Sub Status
Als u het voorbeeldvenster in de Data model viewer uitvouwt, ziet u een deel van deze volledige resultatenset georganiseerd in een tabel:
Voorbeeld van Changes-tabel in de Data model viewer
Change ID
Status ID
Scheduled Start Date
Scheduled End Date
Business Impact
Status
Sub Status
10030
4
19/01/2022
23/02/2022
None
Closed
Cancelled
10031
3
20/01/2022
25/03/2022
Low
Closed
Completed
10015
3
04/01/2022
15/02/2022
Low
Closed
Completed
10103
1
02/04/2022
29/05/2022
Medium
Open
Not Started
10116
1
15/04/2022
24/04/2022
None
Open
Not Started
10134
1
03/05/2022
08/07/2022
Low
Open
Not Started
10264
1
10/09/2022
17/10/2022
Medium
Open
Not Started
10040
1
29/01/2022
22/04/2022
None
Open
Not Started
10323
1
08/11/2022
26/11/2022
High
Open
Not Started
10187
2
25/06/2022
24/08/2022
Low
Open
Started
10185
2
23/06/2022
08/09/2022
None
Open
Started
10220
2
28/07/2022
06/09/2022
None
Open
Started
10326
2
11/11/2022
05/12/2022
None
Open
Started
10138
2
07/05/2022
03/08/2022
None
Open
Started
10334
2
19/11/2022
06/02/2023
Low
Open
Started
Omdat de vijfde rij in de Status-tabel (Status ID: '5', Status: 'Closed', Sub Status: 'Obsolete') niet overeenkomt met een van de records in de Changes-tabel, verschijnt de informatie in deze rij niet in de bovenstaande resultatenset.
Keer terug naar de Data load editor. Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg dit veld toe als dimensie: Status.
Voeg deze measure toe:
=Count([Change ID])
Nu kunt u het aantal wijzigingen per status inspecteren.
Resultatentabel
Status
=Count([Change ID])
Open
12
Closed
3
Load script-voorbeelden - Inner join
Een inner join behoudt alleen records die in beide tabellen bestaan (gebaseerd op overeenkomende veldwaarden).
Load script
Voeg het voorbeeldscript toe aan uw applicatie en voer het uit. Om het resultaat te zien, voegt u de velden die in de resultatenkolom staan toe aan een werkblad in uw applicatie.
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 ];
Dit voorbeeld demonstreert de Inner Join-uitvoer waarbij alleen waarden die in zowel de eerste (linker) als de tweede (rechter) tabel aanwezig zijn, worden samengevoegd.
Overzicht
U heeft orders en een lijst met verzonden orders. U wilt alleen de orders die zijn verzonden.
Als u het voorbeeldvenster in de Data model viewer uitvouwt, ziet u een deel van de volledige resultatenset georganiseerd in een tabel:
Voorbeeld van tabel in de Data model viewer
OrderID
Amount
ShipDate
2
150
2022-05-01
3
400
2022-05-02
Alleen OrderID 2 en 3 verschijnen, omdat ze in beide tabellen bestaan.
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een gegevensverzameling die wijzigingsrecords vertegenwoordigt, die wordt geladen in een tabel genaamd Changes.
Een tweede gegevensverzameling die wijzigingsrecords vertegenwoordigt die afkomstig zijn van het bronsysteem JIRA. Deze wordt geladen en gecombineerd met de oorspronkelijke records door deze te koppelen met een Inner Join load-voorvoegsel.
Deze Inner Join zorgt ervoor dat alleen de vijf wijzigingsrecords die in beide gegevensverzamelingen worden gevonden, worden behouden.
Load script
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');
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
Source System
Change ID
Business Impact
Nu kunt u de vijf resulterende records inspecteren. De resulterende tabel van een Inner Join bevat alleen records met overeenkomende informatie in beide gegevensverzamelingen.
Resultatentabel
Source System
Change ID
Business Impact
JIRA
10030
None
JIRA
10134
Low
JIRA
10220
None
JIRA
10323
High
JIRA
10334
Low
Load script-voorbeelden - Outer join
Een outer join behoudt alle records uit beide tabellen. Waar geen overeenkomst is, worden velden leeg gelaten.
Load script
Voeg het voorbeeldscript toe aan uw applicatie en voer het uit. Om het resultaat te zien, voegt u de velden die in de resultatenkolom staan toe aan een werkblad in uw applicatie.
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 ];
In dit voorbeeld worden de twee tabellen, Table1 en Table2, samengevoegd tot één tabel met het label Table1. In gevallen als deze wordt het outer-voorvoegsel vaak gebruikt om verschillende tabellen samen te voegen tot één tabel om aggregaties uit te voeren over de waarden van een enkele tabel.
Overzicht
U wilt een volledige lijst van alle klanten en orders, zelfs als sommige klanten geen orders hebben en sommige orders geen klantrecord hebben.
Load script
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
];
Resultaten
Als u het voorbeeldvenster in de Data model viewer uitvouwt, ziet u een deel van deze volledige resultatenset georganiseerd in een tabel:
Voorbeeld van tabel in de Data model viewer
OrderID
CustomerID
Name
1
101
Alice
2
102
Bob
3
104
-
-
103
Carol
OrderID 3 heeft geen overeenkomende klant (Name leeg).
CustomerID 103 (Carol) heeft geen overeenkomende order (OrderID leeg).
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een gegevensverzameling die wijzigingsrecords vertegenwoordigt, die wordt geladen in een tabel genaamd Changes.
Een tweede gegevensverzameling die wijzigingsrecords vertegenwoordigt die afkomstig zijn van het bronsysteem JIRA, die wordt geladen en gecombineerd met de oorspronkelijke records door deze te koppelen met een Outer Join load-voorvoegsel.
Dit zorgt ervoor dat alle overlappende wijzigingsrecords uit beide gegevensverzamelingen behouden blijven.
Load script
// 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');
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
Source System
Change ID
Business Impact
Nu kunt u de 10 resulterende records inspecteren.
Resultatentabel
Source System
Change ID
Business Impact
JIRA
10030
None
JIRA
10134
Low
JIRA
10220
None
JIRA
10323
-
JIRA
10334
Low
JIRA
10597
-
-
10015
Low
-
10031
Low
-
10040
None
-
10138
None
Load script-voorbeelden - Right join
Een right join behoudt alle records uit de brontabel en voegt overeenkomende info uit de doeltabel toe. Als de doeltabel geen overeenkomst heeft, zijn velden daaruit leeg.
Load script
Voeg het voorbeeldscript toe aan uw applicatie en voer het uit. Om het resultaat te zien, voegt u de velden die in de resultatenkolom staan toe aan een werkblad in uw applicatie.
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 ];
Dit voorbeeld demonstreert de Right Join-uitvoer waarbij alleen waarden die in de tweede (rechter) tabel aanwezig zijn, worden samengevoegd.
Overzicht
Uw brontabel is een lijst met klanten; u wilt alle klanten, plus eventuele overeenkomende orders.
Load script
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
];
Resultaten
Als u het voorbeeldvenster in de Data model viewer uitvouwt, ziet u een deel van deze volledige resultatenset georganiseerd in een tabel:
Voorbeeld van tabel in de Data model viewer
CustomerID
Name
OrderID
101
Alice
1
102
Bob
2
103
Carol
-
Alle klanten verschijnen.
Carol heeft geen orders (OrderID leeg).
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een gegevensverzameling die wijzigingsrecords vertegenwoordigt, die wordt geladen in een tabel genaamd Changes.
Een tweede gegevensverzameling die wijzigingsrecords vertegenwoordigt die afkomstig zijn van het bronsysteem Teamwork. Deze wordt geladen en gecombineerd met de oorspronkelijke records door deze te koppelen met een Right Join load-voorvoegsel.
Dit zorgt ervoor dat alleen Teamwork-wijzigingsrecords worden behouden, terwijl geen Teamwork-records verloren gaan als de doeltabel geen overeenkomend Change ID heeft.
Load script
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');
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
Source System
Change ID
Business Impact
Nu kunt u de vijf resulterende records inspecteren.
Resultatentabel
Source System
Change ID
Business Impact
Teamwork
10015
Low
Teamwork
10031
Low
Teamwork
10040
None
Teamwork
10103
Medium
Teamwork
50231
-
Probleemoplossing - Cross join
Overzicht
Als u twee tabellen samenvoegt zonder overeenkomende veldnamen, wordt elke rij uit de eerste tabel gecombineerd met elke rij uit de tweede — wat potentieel een enorm aantal records (een cartesiaans product) produceert en leidt tot onverwachte gegevenskoppelingen.