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 QlikView kunt u joins maken in het script, resulterend in logische tabellen.

De QlikView-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 QlikView 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 QlikView 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.

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.

Keep

Een van belangrijkste functies in QlikView 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 QlikView 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 QlikView opgeslagen.

Inner

De prefixen Join en Keep in de scripttaal van QlikView 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 QlikView.

Example:  

In deze voorbeelden gebruiken we de brontabellen Table1 en Table2:

Inner Voorbeelden in brontabellen

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;

Voorbeeld Inner Join

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;

Voorbeeld Inner Keep

Left

De prefixen Join en Keep in de scripttaal van QlikView 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 QlikView.

Example:  

In deze voorbeelden gebruiken we de brontabellen Table1 en Table2:

Left Voorbeelden in brontabellen

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;

Voorbeeld Left Join

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;

Voorbeeld Left Keep

Right

De prefixen Join en Keep in de scripttaal van QlikView 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 QlikView .

Example:  

In deze voorbeelden gebruiken we de brontabellen Table1 en Table2:

Right Voorbeelden in brontabellen

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;

Voorbeeld Right Join

Als we in plaats daarvan een Right 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;

Voorbeeld Right Keep