Tabellen samenvoegen met Join en Keep

Een join is een bewerking waarmee twee tabellen worden samengevoegd tot één tabel. De records van de resulterende tabel zijn een combinatie van de records in de oorspronkelijke tabellen. Deze combinaties zijn doorgaans zodanig dat de twee records die een combinatie vormen in de resulterende tabel een gemeenschappelijke waarde hebben voor een of meerdere gemeenschappelijke velden: een zogeheten natuurlijke join. In Qlik Sense kunt u joins maken in het script, resulterend in logische tabellen.

Het is mogelijk tabellen al in het script samen te voegen. De Qlik Sense-logica ziet dan niet de afzonderlijke tabellen, maar het resultaat van de join: één interne tabel. In sommige situaties is dit nodig, maar er zijn nadelen:

  • De geladen tabellen worden vaak groter en Qlik Sense werkt trager.
  • Een aantal gegevens kan verloren gaan: de frequentie (het aantal records) binnen de oorspronkelijke tabel is mogelijk niet meer beschikbaar.

De functie Keep reduceert een of beide tabellen tot de gemeenschappelijke tabelgegevens voordat de tabellen in Qlik Sense worden opgeslagen. Dit vermindert het aantal gevallen waarbij expliciete joins nodig zijn.

Opmerking: In deze documentatie wordt de term join meestal gebruikt voor koppelingen die zijn gemaakt voordat de interne tabellen worden gemaakt. De associatie die plaatsvindt nadat de logische tabellen zijn gemaakt, is echter in wezen ook een join.

Joins binnen een SQL SELECT-opdracht

Bij sommige ODBC-stuurprogramma's is het mogelijk een join te maken met een SELECT-opdracht. Dit is bijna equivalent aan het maken van een join met behulp van het prefix Join.

De meeste ODBC-stuurprogramma's zijn echter niet in staat om een volledige (bidirectionele) outer join te maken. Alleen een outer join links of rechts is mogelijk. Een outer join links (rechts) bevat alleen combinaties waarbij de koppeling bestaat in de tabel links (rechts). Een volledige outer join bevat elke combinatie. Qlik Sense maakt automatisch een volledige outer join.

Verder is het maken van joins in SELECT-opdrachten veel ingewikkelder dan het maken van joins in Qlik Sense.

Example:  

SELECT DISTINCTROW

[Order Details].ProductID, [Order Details].

UnitPrice, Orders.OrderID, Orders.OrderDate, Orders.CustomerID

FROM Orders

RIGHT JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID;

Met deze SELECT-opdracht wordt een tabel met bestellingen voor een fictieve onderneming samengevoegd met een tabel met bestelgegevens. Het is een outer join rechts, waarbij alle records van OrderDetails worden opgenomen, ook met een OrderID die niet voorkomt in de tabel Orders. Bestellingen die wel voorkomen in Orders, maar niet in OrderDetails, worden echter niet opgenomen.

Join

De eenvoudigste manier om een join te maken is met het prefix Join in het script, waarmee de interne tabel met een andere benoemde tabel of met de laatste eerder gemaakte tabel wordt samengevoegd. Het gaat hier om een outer join, waarbij alle mogelijke combinaties van waarden uit de twee tabellen worden gemaakt.

Example:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

De resulterende interne tabel bevat de velden a, b, c en d. Het aantal records is afhankelijk van de veldwaarden van de twee tabellen.

Opmerking: De namen van de velden voor de koppeling moeten exact gelijk zijn. Het aantal velden voor de koppeling is willekeurig. De tabellen hebben doorgaans één of enkele velden gemeenschappelijk. Zonder gemeenschappelijke velden wordt het cartesiaanse product van de tabellen weergegeven. Alle velden gemeenschappelijk is ook mogelijk, maar heeft meestal weinig zin. Tenzij een tabelnaam van een eerder geladen tabel is opgegeven in de Join-opdracht, wordt voor de prefix Join de laatste eerder gemaakte tabel gebruikt. De volgorde van de twee opdrachten is dus niet willekeurig.

Ga voor meer informatie naar Join.

Keep

Het expliciete prefix Join in het script voor het laden van gegevens zorgt voor een volledige join van de twee tabellen. Het resultaat is één tabel. Dergelijke koppelingen resulteren vaak in zeer grote tabellen. Een van belangrijkste functies in Qlik Sense is de mogelijkheid om tabellen met elkaar te associëren in plaats van ze samen te voegen. Dit vereist minder geheugen, verhoogt de snelheid en biedt een enorme flexibiliteit. De functionaliteit van keep is ontworpen ter verkleining van het aantal gevallen waar expliciete joins moeten worden gebruikt.

Het prefix Keep tussen twee LOAD- of SELECT-opdrachten zorgt voor de reductie van een of beide van de twee tabellen tot de gemeenschappelijke tabelgegevens, voordat ze in Qlik Sense worden opgeslagen. Het prefix Keep moet worden voorafgegaan door een van de volgende trefwoorden Inner, Left of Right. De selectie van records uit de tabellen gebeurt net zoals bij een overeenkomstige join. De twee tabellen worden echter niet samengevoegd maar als twee afzonderlijk benoemde tabellen in Qlik Sense opgeslagen.

Ga voor meer informatie naar Keep.

Inner

De prefixen Join en Keep in het script voor het laden van gegevens kunnen worden voorafgegaan door het prefix Inner.

Indien gebruikt voor Join, geeft het prefix aan dat een inner join moet worden gebruikt tussen de twee tabellen. De resulterende tabel bevat dan alleen combinaties tussen de twee tabellen met een volledige gegevensset van beide kanten.

Indien gebruikt voor Keep, geeft de opdracht aan dat de twee tabellen worden gereduceerd tot gegevens die passen bij beide tabellen, voordat deze worden opgeslagen in Qlik Sense.

Example:  

In deze voorbeelden gebruiken we de brontabellen Table1 en Table2:

Table 1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Inner Join

Eerst voeren we een Inner Join uit op de tabellen, wat een VTable oplevert die één rij, het enige record dat in beide tabellen voorkomt, met gegevens uit beide tabellen bevat.

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

VTable
A B C
1 aa xx

Inner Keep

Als we in plaats daarvan een Inner Keep uitvoeren, is het resultaat nog steeds twee tabellen. De twee tabellen zijn via het gemeenschappelijke veld A natuurlijk wel met elkaar verbonden.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Ga voor meer informatie naar Inner.

Left

De prefixen Join en Keep in het script voor het laden van gegevens kunnen worden voorafgegaan door het prefix left.

Indien gebruikt voor Join, geeft het prefix aan dat een left join moet worden gebruikt tussen de twee tabellen. De resulterende tabel bevat dan alleen combinaties tussen de twee tabellen met een volledige gegevensset van de eerste tabel.

Indien gebruikt voor Keep, geeft dit aan dat de tweede tabel wordt gereduceerd tot gegevens die passen bij de eerste tabel, voordat deze wordt opgeslagen in Qlik Sense.

Example:  

In deze voorbeelden gebruiken we de brontabellen Table1 en Table2:

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Eerst voeren we een Left Join uit op de tabellen, wat resulteert in een VTable die alle rijen uit Table1 bevat, gecombineerd met velden uit de bijpassende rijen in Table2.

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

VTable
A B C
1 aa xx
2 cc -
3 ee -

Als we in plaats daarvan een Left Keep uitvoeren, is het resultaat nog steeds twee tabellen. De twee tabellen zijn via het gemeenschappelijke veld A natuurlijk wel met elkaar verbonden.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

VTab1
A B
1 aa
2 cc
3 ee
VTab2
A C
1 xx

Ga voor meer informatie naar Left.

Right

De prefixen Join en Keep in het script voor het laden van gegevens kunnen worden voorafgegaan door het prefix right.

Indien gebruikt voor Join, geeft het prefix aan dat een right join moet worden gebruikt tussen de twee tabellen. De resulterende tabel bevat dan alleen combinaties tussen de twee tabellen met een volledige gegevensset van de tweede tabel.

Indien gebruikt voor Keep, geeft dit aan dat de eerste tabel wordt gereduceerd tot gegevens die passen bij de eerste tabel, voordat deze wordt opgeslagen in Qlik Sense .

Example:  

In deze voorbeelden gebruiken we de brontabellen Table1 en Table2:

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Eerst voeren we een Right Join uit op de tabellen, wat resulteert in een VTable die alle rijen uit Table2 bevat, gecombineerd met velden uit de bijpassende rijen in Table1.

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

VTable
A B C
1 aa xx
4 - yy

Als we in plaats daarvan een Left Keep uitvoeren, is het resultaat nog steeds twee tabellen. De twee tabellen zijn via het gemeenschappelijke veld A natuurlijk wel met elkaar verbonden.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx
4 yy

Ga voor meer informatie naar Right.