Zu Hauptinhalt springen

Kombinieren von Tabellen mit Join und Keep

AUF DIESER SEITE

Kombinieren von Tabellen mit Join und Keep

Bei der Verknüpfung werden zwei Tabellen zu einer Tabelle kombiniert. Dabei bilden jeweils zwei Datensätze aus den Ursprungstabellen, meist zwei Datensätze, die einen Wert in einem Feld gemeinsam haben, einen neuen Datensatz in der entstehenden Tabelle. In Qlik Sense können Verknüpfungen im Skript definiert werden. Dabei werden programminterne Tabellen erzeugt.

Durch den join-Zusatz im Skript ist es möglich, Tabellen beim Einlesen durch Joins zusammenzuschließen. In diesem Fall speichert Qlik Sense nur eine einzelne interne Tabelle als Ergebnis des Joins. Dies ist in einigen Situationen erforderlich, jedoch bestehen auch Nachteile.

  • Die internen Tabellen werden fast immer größer und Qlik Sense arbeitet entsprechend langsamer.
  • Einige Informationen gehen möglicherweise verloren, z. B. die Häufigkeit (Anzahl der Datensätze) in der zugrunde liegenden Tabelle.

Der Keep-Zusatz bewirkt, dass vor dem Speichern in Qlik Sense die beiden Tabellen verglichen werden und dass aufgrund dieses Vergleichs in einer oder in beiden Tabellen bestimmte Datensätze wegfallen. Dadurch kann in den meisten Fällen auf einen Join verzichtet werden.

Hinweis: In diesem Handbuch wird der Begriff „Join“ nur für Joins gebraucht, die vor dem Speichern der Tabellen entstehen. Die Verknüpfung von Tabellen, nachdem diese angelegt wurden, ist im Grunde genommen aber auch nichts anderes als ein Join.

Join

Am einfachsten erstellen Sie Joins durch einen Join-Zusatz im Skript, mit dem die interne Tabelle mit einer anderen benannten Tabelle oder mit der zuletzt erstellten Tabelle zusammengefügt wird. Dieser kombiniert die Tabelle mit einer bereits erstellten Tabelle durch einen Outer Join, d. h. in der entstehenden Tabelle sind alle möglichen Kombinationen von Datensätzen enthalten.

Example:  

LOAD a, b, c from table1.csv; join LOAD a, d from table2.csv;

Die entstehende Tabelle enthält die Felder a, b, c und d. Die Anzahl der Datensätze hängt von den Feldwerten der beiden Tabellen ab.

Hinweis: Die Namen der Felder, über die der Join gemacht wird, müssen exakt übereinstimmen. Der Join kann über beliebig viele Felder gemacht werden. Meistens haben die Tabellen nur ein oder wenige Felder gemeinsam. Haben die Tabellen gar kein Feld gemeinsam, so ergibt der Join das karthesische Produkt der Tabellen. Es ist möglich, dass die Tabellen in allen Feldnamen übereinstimmen, dies ergibt jedoch im Allgemeinen keinen Sinn. Sofern im Join-Befehl mit Join-Zusatz kein anderer Tabellenname einer zuvor geladenen Tabelle angegeben ist, bezieht er sich jeweils auf die direkt zuvor angelegte Tabelle. Die Reihenfolge der Befehle ist daher nicht beliebig.

Weitere Informationen finden Sie unter Join.

Verwenden von Join

Der explizite Zusatz Join im Qlik Sense-Skript bewirkt eine vollständige Zusammenfügung der beiden Tabellen, d. h. die beiden Tabellen werden zu einer zusammengeschlossen. Solche Verknüpfungen können oft zu sehr großen Tabellen führen.

  1. Öffnen Sie die App Erweitertes Skript-Tutorial.
  2. Fügen Sie einen neuen Skriptabschnitt im Dateneditor hinzu.
  3. Rufen Sie den Abschnitt Transactions auf.
  4. Klicken Sie im rechten Menü unter AttachedFiles auf Daten auswählen.

  5. Laden Sie Transactions.csv hoch und wählen Sie die Datei aus.
  6. Tipp: Achten Sie unter Feldnamen darauf, dass der Eintrag Eingebettete Feldnamen ausgewählt ist, damit die Namen der Tabellenfelder beim Laden der Daten eingeschlossen sind.
  7. Klicken Sie im Fenster Daten auswählen aus auf Skript einfügen.
  8. Laden Sie Salesman.xlsx hoch und wählen Sie die Datei aus.
  9. Klicken Sie im Fenster Daten auswählen aus auf Skript einfügen.
  10. Ihr Skript sollte folgendermaßen aussehen:

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

  11. Klicken Sie auf Daten laden.
  12. Öffnen Sie die Datenmodellansicht. Das Datenmodell sieht folgendermaßen aus:
  13. Datenmodell: Tabellen Transactions, Salesman und Product
    Data model, Transactions, Salesman, and Product tables.

Jedoch entsprechen getrennte Transactions- und Salesman-Tabellen möglicherweise nicht dem geforderten Ergebnis. Dann ist es besser, die beiden Tabellen zusammenzufügen.

  1. Um einen Namen für die verknüpfte Tabelle festzulegen, fügen Sie die folgende Zeile oberhalb der ersten LOAD-Anweisung hinzu:
  2. Transactions:

  3. Um die Tabellen Transactions und Salesman zu verknüpfen, fügen Sie die folgende Zeile über der zweiten LOAD-Anweisung hinzu:
  4. Join(Transactions)

    Ihr Skript sollte folgendermaßen aussehen:

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

  5. Klicken Sie auf Daten laden.
  6. Öffnen Sie die Datenmodellansicht. Das Datenmodell sieht folgendermaßen aus:
  7. Datenmodell: Tabellen Transactions und Product
    Data model following Join.

    Alle Felder der Tabellen Transactions und Salesman werden nun in einer einzigen Transactions-Tabelle kombiniert.

Hinweis: Weitere Informationen zur Verwendung von Join finden Sie in den folgenden Blog-Einträgen in Qlik Community: To Join or not to Join (Verknüpfen oder nicht verknüpfen), Mapping as an Alternative to Joining(Mapping als Alternative für die Verknüpfung). Die Verhaltensweisen werden im Kontext von QlikView besprochen. Die Logik gilt aber ebenso für Qlik Sense.

Keep

Einer der großen Vorteile von Qlik Sense besteht aber gerade darin, dass automatisch Verknüpfungen zwischen Tabellen hergestellt werden, ohne dass ein Join gemacht wird. Dadurch wird Speicherplatz gespart, die Zugriffszeiten verkürzen sich, und das System behält eine hohe Flexibilität. Durch die Keep-Funktion reduziert sich die Zahl der Fälle, in denen explizite Joins benötigt werden, nochmals.

Der Zusatz Keep zwischen zwei LOAD- oder SELECT-Anweisungen bewirkt, dass vor dem Speichern in Qlik Sense eine oder beide Tabellen auf die Schnittmenge der Tabellendaten reduziert werden. Dem Keep-Zusatz muss stets einer der Zusätze Inner, Left oder Right vorangehen. Die Auswahl der Datensätze in den Tabellen erfolgt nach denselben Regeln wie bei dem entsprechenden Join. Die Tabellen werden jedoch nicht zusammengeschlossen, sondern als zwei Tabellen unter verschiedenen Namen in Qlik Sense gespeichert.

Weitere Informationen finden Sie unter Keep.

Inner

Vor Join und Keep kann im Datenladeskript der Zusatz Inner gestellt werden.

Vor Join bewirkt er, dass ein Inner Join hergestellt wird. Die dadurch entstehende Tabelle enthält nur die Datensätze, zu denen in der jeweils anderen Tabelle ein passender Datensatz vorhanden ist.

Vor einem Keep-Zusatz bewirkt „Inner“, dass von beiden Tabellen nur die Datensätze in Qlik Sense gespeichert werden, für die in der jeweils anderen Tabelle ein passender Datensatz vorhanden ist.

Example:  

In diesen Beispielen werden die Quelltabellen Table1 und Table2 verwendet.

Beachten Sie, dass es sich hierbei nur um Beispiele handelt. Es sind keine in Qlik Sense zu bearbeitenden Übungen vorhanden.

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

Inner Join

Zunächst wird für die Tabellen ein Inner Join durchgeführt. Daraus ergibt sich VTable mit lediglich einer einzigen Zeile, der einzige Datensatz, der in beiden Tabellen vorhanden ist, wobei die Daten von beiden Tabellen kombiniert werden.

VTable: SELECT * from Table1; inner join SELECT * from Table2;

VTable
A B C
1 aa xx

Inner Keep

Wird stattdessen ein Inner Keep durchgeführt, bleiben weiterhin zwei Tabellen bestehen. Die beiden Tabellen sind über das gemeinsame Feld A miteinander verknüpft.

VTab1: SELECT * from Table1; VTab2: inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Weitere Informationen finden Sie unter Inner.

Left

Vor Join und Keep kann im Datenladeskript der Zusatz left gestellt werden.

Vor einem Join-Zusatz bewirkt "left", dass ein Left Join hergestellt wird. Die dadurch entstehende Tabelle enthält die Datensätze der ersten Tabelle ergänzt mit den passenden Sätzen der zweiten Tabelle, sofern vorhanden.

Vor einem Keep-Zusatz bewirkt „Left“, dass von der zweiten Tabelle nur die Datensätze in Qlik Sense gespeichert werden, für die ein passender Datensatz in der ersten Tabelle existiert.

Example:  

In diesen Beispielen werden die Quelltabellen Table1 und Table2 verwendet.

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

Zunächst wird für die Tabellen ein Left Join durchgeführt, wodurch eine VTable mit allen Zeilen aus Table1 entsteht, die mit den passenden Feldern in Table2 kombiniert wird.

VTable: SELECT * from Table1; left join SELECT * from Table2;

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

Wird stattdessen ein Left Keep durchgeführt, bleiben weiterhin zwei Tabellen bestehen. Die beiden Tabellen sind über das gemeinsame Feld A miteinander verknüpft.

VTab1: SELECT * from Table1; VTab2: left keep SELECT * from Table2;

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

Weitere Informationen finden Sie unter Left.

Right

Vor Join und Keep kann in der Qlik Sense-Skriptsprache der Zusatz right platziert werden.

Vor einem Join-Zusatz bewirkt „Right“, dass ein Right Join hergestellt wird. Die dadurch entstehende Tabelle enthält die Datensätze der zweiten Tabelle, ergänzt durch die passenden Sätze der ersten Tabelle, sofern vorhanden.

Vor einem Keep-Zusatz bewirkt „Right“, dass von der ersten Tabelle nur die Datensätze in Qlik Sense gespeichert werden, für die ein passender Datensatz in der zweiten Tabelle existiert.

Example:  

In diesen Beispielen werden die Quelltabellen Table1 und Table2 verwendet.

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

Zunächst wird für die Tabellen ein Right Join durchgeführt, wodurch eine VTable mit allen Zeilen aus Table2 entsteht, die mit den passenden Feldern in Table1 kombiniert wird.

VTable: SELECT * from Table1; right join SELECT * from Table2;

VTable
A B C
1 aa xx
4 - yy

Wird stattdessen ein Right Keep durchgeführt, bleiben weiterhin zwei Tabellen bestehen. Die beiden Tabellen sind über das gemeinsame Feld A miteinander verknüpft.

VTab1: SELECT * from Table1; VTab2: right keep SELECT * from Table2;

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

Weitere Informationen finden Sie unter Right.