Tabellen combineren met Join en Keep | Qlik Cloud Help
Ga naar hoofdinhoud Ga naar aanvullende inhoud

Tabellen combineren 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.

InformatieIn 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-statement

Met sommige ODBC-stuurprogramma's is het mogelijk om een join te maken binnen het SELECT-statement. Dit is vrijwel gelijk aan het maken van een join met behulp van het voorvoegsel Join.

De meeste ODBC-stuurprogramma's kunnen echter geen volledige (bidirectionele) outer join maken. Ze kunnen alleen een left of right outer join maken. Een left (right) outer join bevat alleen combinaties waarbij de join-sleutel in de linkertabel (rechtertabel) bestaat. Een full outer join bevat elke combinatie. Qlik Sense maakt automatisch een full outer join.

Bovendien is het maken van joins in SELECT-statements veel ingewikkelder dan het maken van joins in Qlik Sense.

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;

Dit SELECT-statement voegt een tabel met bestellingen aan een fictief bedrijf samen met een tabel met bestelgegevens. Het is een right outer join, wat betekent dat alle records van OrderDetails zijn opgenomen, ook de records met een OrderID dat niet bestaat in de tabel Orders. Bestellingen die wel in Orders bestaan maar niet in OrderDetails, worden echter niet opgenomen.

Join

De eenvoudigste manier om een join te maken is met het voorvoegsel Join in het script, dat de interne tabel samenvoegt met een andere benoemde tabel of met de laatst gemaakte tabel. De join is een outer join, waarbij alle mogelijke combinaties van waarden uit de twee tabellen worden gemaakt.

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

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

InformatieDe namen van de velden waarover de join wordt uitgevoerd, moeten exact hetzelfde zijn. Het aantal velden waarover de join wordt uitgevoerd, is willekeurig. Meestal hebben de tabellen één of enkele velden gemeen. Als er geen gemeenschappelijk veld is, wordt het cartesisch product van de tabellen weergegeven. Alle velden gemeen is ook mogelijk, maar is meestal niet logisch. Tenzij een tabelnaam van een eerder geladen tabel is opgegeven in het Join-statement, gebruikt het voorvoegsel Join de laatst gemaakte tabel. De volgorde van de twee statements is dus niet willekeurig.

Voor meer informatie, zie Join.

Keep

Het expliciete voorvoegsel Join in het load-script voor gegevens voert een volledige join van de twee tabellen uit. Het resultaat is één tabel. In veel gevallen leiden dergelijke joins tot zeer grote tabellen. Een van de belangrijkste functies van Qlik Sense is de mogelijkheid om koppelingen tussen tabellen te maken in plaats van ze samen te voegen, wat de benodigde ruimte in het geheugen vermindert, de snelheid verhoogt en een enorme flexibiliteit biedt. De keep-functionaliteit is ontworpen om het aantal gevallen te verminderen waarin expliciete joins moeten worden gebruikt.

Het voorvoegsel Keep tussen twee LOAD- of SELECT-statements heeft als effect dat een of beide van de twee tabellen worden gereduceerd tot de doorsnede van de tabelgegevens voordat ze worden opgeslagen in Qlik Sense. Het voorvoegsel Keep moet altijd worden voorafgegaan door een van de trefwoorden Inner, Left of Right. De selectie van records uit de tabellen wordt op dezelfde manier gemaakt als in een overeenkomstige join. De twee tabellen worden echter niet samengevoegd en worden in Qlik Sense opgeslagen als twee afzonderlijk benoemde tabellen.

Voor meer informatie, zie Keep.

Inner

De voorvoegsels Join en Keep in het load-script voor gegevens kunnen worden voorafgegaan door het voorvoegsel Inner.

Als het wordt gebruikt vóór Join, geeft dit aan dat de join tussen de twee tabellen een inner join moet zijn. De resulterende tabel bevat alleen combinaties tussen de twee tabellen met een volledige gegevensverzameling van beide kanten.

Als het wordt gebruikt vóór Keep, geeft dit aan dat de twee tabellen moeten worden gereduceerd tot hun gemeenschappelijke doorsnede voordat ze worden opgeslagen in Qlik Sense.

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 resulteert in VTable, die slechts één rij bevat, het enige record dat in beide tabellen bestaat, met gegevens gecombineerd uit beide tabellen.

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, hebt u nog steeds twee tabellen. De twee tabellen zijn gekoppeld via het gemeenschappelijke veld A.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Voor meer informatie, zie Inner.

Left

De voorvoegsels Join en Keep in het load-script voor gegevens kunnen worden voorafgegaan door het voorvoegsel left.

Als het wordt gebruikt vóór Join, geeft dit aan dat de join tussen de twee tabellen een left join moet zijn. De resulterende tabel bevat alleen combinaties tussen de twee tabellen met een volledige gegevensverzameling uit de eerste tabel.

Als het wordt gebruikt vóór Keep, geeft dit aan dat de tweede tabel moet worden gereduceerd tot de gemeenschappelijke doorsnede met de eerste tabel voordat deze wordt opgeslagen in Qlik Sense.

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 VTable, die alle rijen uit Table1 bevat, gecombineerd met velden uit overeenkomende 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, hebt u nog steeds twee tabellen. De twee tabellen zijn gekoppeld via het gemeenschappelijke veld A.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

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

Voor meer informatie, zie Left.

Right

De voorvoegsels Join en Keep in het load-script voor gegevens kunnen worden voorafgegaan door het voorvoegsel right.

Als het wordt gebruikt vóór Join, geeft dit aan dat de join tussen de twee tabellen een right join moet zijn. De resulterende tabel bevat alleen combinaties tussen de twee tabellen met een volledige gegevensverzameling uit de tweede tabel.

Als het wordt gebruikt vóór Keep, geeft dit aan dat de eerste tabel moet worden gereduceerd tot de gemeenschappelijke doorsnede met de tweede tabel voordat deze wordt opgeslagen in Qlik Sense.

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 VTable, die alle rijen uit Table2 bevat, gecombineerd met velden uit overeenkomende 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 Right Keep uitvoeren, hebt u nog steeds twee tabellen. De twee tabellen zijn gekoppeld via het gemeenschappelijke veld A.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

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

Voor meer informatie, zie Right.

Was deze pagina nuttig?

Als u problemen ervaart op deze pagina of de inhoud onjuist is – een tikfout, een ontbrekende stap of een technische fout – laat het ons weten!