Ga naar hoofdinhoud

Tabellen samenvoegen met Join en Keep

OP DEZE PAGINA

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.

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.

Join gebruiken

Het expliciete prefix Join in de scripttaal van Qlik Sense zorgt voor een volledige koppeling van de twee tabellen. Het resultaat is één tabel. Zulke joins resulteren vaak in zeer grote tabellen.

Doe het volgende:

  1. Open de app Zelfstudie voor geavanceerd scriptgebruik.
  2. Voeg een nieuwe scriptsectie toe in de Editor voor het laden van gegevens.
  3. Roep de sectie Transactions aan.
  4. Onder DataFiles in het rechtermenu klikt u op Gegevens selecteren.

  5. Upload en selecteer Transactions.csv.
  6. Tip: Selecteer alle velden en zorg ervoor dat Ingesloten veldnamen onder Veldnamen is geselecteerd om de namen van de tabelvelden mee te nemen bij het laden van de gegevens.
  7. In het venster Selecteer gegevens uit klikt u op Script invoeren.
  8. Upload en selecteer Salesman.xlsx.
  9. In het venster Selecteer gegevens uit klikt u op Script invoeren.
  10. Uw script zou er als volgt moeten uitzien:

    LOAD "Transaction ID", "Salesman ID", Product, "Serial No", "ID Customer", "List Price", "Gross Margin" FROM [lib://DataFiles/Transactions.csv] (txt, codepage is 28591, embedded labels, delimiter is ',', msq); LOAD "Salesman ID", Salesman, "Distributor ID" FROM [lib://DataFiles/Salesman.xlsx] (ooxml, embedded labels, table is Salesman);

  11. Klik op Gegevens laden.
  12. Open de gegevensmodelviewer. Het gegevensmodel ziet er als volgt uit:
  13. Gegevensmodel: Tabellen Transactions, Salesman en Product
    Data model, Transactions, Salesman, and Product tables.

Als de tabellen Transactions en Salesman gescheiden zijn, levert dit echter mogelijk niet het vereiste resultaat op. Het is wellicht beter om de twee tabellen samen te voegen.

Doe het volgende:

  1. Om de samengevoegde tabel een naam te geven plaatst u de volgende regel boven de eerste LOAD-opdracht:
  2. Transactions:

  3. Als u de tabellen Transactions en Salesman wilt samenvoegen, voegt u de volgende regel toe boven de tweede LOAD-opdracht:
  4. Join(Transactions)

    Uw script zou er als volgt moeten uitzien:

    Transactions:
    LOAD
        "Transaction ID",
        "Salesman ID",
        Product,
        "Serial No",
        "ID Customer",
        "List Price",
        "Gross Margin"
    FROM [lib://DataFiles/Transactions.csv]
    (txt, codepage is 28591, embedded labels, delimiter is ',', msq);
    
    Join(Transactions)
    LOAD
        "Salesman ID",
        Salesman,
        "Distributor ID"
    FROM [lib://DataFiles/Salesman.xlsx]
    (ooxml, embedded labels, table is Salesman);

  5. Klik op Gegevens laden.
  6. Open de gegevensmodelviewer. Het gegevensmodel ziet er als volgt uit:
  7. Gegevensmodel: Tabellen Transactions en Product
    Data model following Join.

    Alle velden van de tabellen Transactions en Salesman worden nu samengevoegd in een enkele tabel Transactions.

Opmerking: Zie voor meer informatie over het gebruik van Join deze blogposts in Qlik Community: Samenvoegen of niet samenvoegen, Toewijzen als alternatief voor samenvoegen. De gedragingen worden besproken in de context van QlikView. De logica geldt echter net zo voor Qlik Sense.

Keep

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 om het aantal gevallen te beperken waarin expliciete joins moeten worden gebruikt.

Het prefix Keep tussen twee LOAD- of SELECT-opdrachten reduceert een of beide 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.

Onthoud dat dit slechts voorbeelden zijn. Er zijn geen bijbehorende oefeningen in Qlik Sense.

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, hebben we nog steeds twee tabellen. De twee tabellen zijn via het gemeenschappelijke veld A 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, hebben we nog steeds twee tabellen. De twee tabellen zijn via het gemeenschappelijke veld A 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 de scripttaal van Qlik Sense 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 Right Keep uitvoeren, hebben we nog steeds twee tabellen. De twee tabellen zijn via het gemeenschappelijke veld A 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.