Przeskocz do zawartości głównej

Łączenie tabel operatorami Join i Keep

NA TEJ STRONIE

Łączenie tabel operatorami Join i Keep

Sprzężenie to operacja polegająca na połączeniu dwóch tabel w jedną. Rekordami tabeli wynikowej są kombinacje rekordów oryginalnych tabel, zazwyczaj połączone w taki sposób, że rekordy składające się na poszczególne kombinacje w tabeli wynikowej mają wspólną wartość w jednym lub wielu polach wspólnych — jest to tzw. sprzężenie naturalne. W Qlik Sense połączenia mogą być wykonywane w skrypcie, co powoduje tworzenie tabel logicznych.

Tabele można sprzęgać bezpośrednio w skrypcie. Logika aplikacji Qlik Sense nie będzie wtedy widzieć poszczególnych tabel, tylko wynik sprzężenia w postaci pojedynczej tabeli wewnętrznej. W niektórych sytuacjach takie zachowanie jest pożądane, ale ma ono swoje wady:

  • załadowane tabele często stają się większe, a aplikacja Qlik Sense działa wolniej;
  • niektóre informacje mogą zostać utracone, na przykład częstotliwość (liczba rekordów) z pierwotnej tabeli.

Aby ograniczyć liczbę sytuacji wymagających jawnego sprzęgania tabel, stworzono funkcję Keep, której działanie polega na zredukowaniu jednej lub obu tabel do części wspólnej danych przed zapisaniem tych tabel w aplikacji Qlik Sense.

Uwaga: W tej dokumentacji termin „sprzężenie” jest zazwyczaj używany w odniesieniu do sprzężeń wykonywanych przed utworzeniem tabel wewnętrznych. Skojarzenie dokonywane po utworzeniu tabel wewnętrznych w gruncie rzeczy też jest jednak sprzężeniem.

Join

Najprostszym sposobem na uzyskanie sprzężenia jest zastosowanie w skrypcie prefiksu Join, który powoduje wykonanie sprzężenia tabeli wewnętrznej z inną wskazaną tabelą lub z ostatnio utworzoną tabelą. Wykonywane jest sprzężenie zewnętrzne, które daje wszystkie możliwe kombinacje wartości z obu tabel.

Example:  

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

Wynikowa tabela wewnętrzna zawiera pola a, b, c oraz d. Liczba rekordów zależy od wartości pól w obu tabelach.

Uwaga: Nazwy pól, według których wykonywane jest sprzężenie, muszą być identyczne. Liczba pól, według których wykonywane jest sprzężenie, jest dowolna. Zazwyczaj tabele mają wspólne jedno pole lub kilka pól. Brak pola wspólnego spowoduje zwrócenie iloczynu kartezjańskiego tabel. Teoretycznie mogą też być wspólne wszystkie pola, ale zazwyczaj nie ma to sensu. Jeśli w instrukcji Join nie zostanie podana nazwa wcześniej załadowanej tabeli, prefiks Join użyje ostatnio utworzonej tabeli. Kolejność tych dwóch instrukcji nie jest zatem dowolna.

Więcej informacji zawiera temat Join.

Używanie funkcji Join

Jawne użycie prefiksu Join w języku skryptowym Qlik Sense powoduje wykonanie pełnego sprzężenia dwóch tabel. Wynikiem jest pojedyncza tabela. Takie połączenia mogą często prowadzić do powstania bardzo dużych tabel.

  1. Otwórz aplikację Advanced Scripting Tutorial.
  2. Dodaj nową sekcję skryptu w edytorze ładowania danych.
  3. Wywołaj sekcję Transactions.
  4. W sekcji AttachedFiles dostępnej po prawej stronie kliknij przycisk Wybierz dane.

  5. Prześlij, a następnie wybierz Transactions.csv.
  6. Porada: Upewnij się, że w obszarze Nazwy pól zaznaczona jest opcja Osadz. naz. pól, aby podczas ładowania danych uwzględniać również nazwy pól tabeli.
  7. W oknie Wybierz dane z kliknij przycisk Wstaw skrypt.
  8. Prześlij, a następnie wybierz Salesman.xlsx.
  9. W oknie Wybierz dane z kliknij przycisk Wstaw skrypt.
  10. Skrypt powinien wyglądać następująco:

    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. Kliknij polecenie Ładuj dane.
  12. Otwórz przeglądarkę modelu danych. Model danych wygląda następująco:
  13. Model danych: Tabele Transactions, Salesman i Product
    Data model, Transactions, Salesman, and Product tables.

Jednak osobne tabele Transactions i Salesman mogą nie być wymaganym rezultatem. Lepsze może być połączenie tych dwóch tabel.

  1. Aby ustawić nazwę tabeli połączonej, dodaj następujący wiersz nad pierwszą instrukcją LOAD:
  2. Transactions:

  3. Aby połączyć tabele Transactions i Salesman, dodaj następujący wiersz nad drugą instrukcją LOAD:
  4. Join(Transactions)

    Skrypt powinien wyglądać następująco:

    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. Kliknij polecenie Ładuj dane.
  6. Otwórz przeglądarkę modelu danych. Model danych wygląda następująco:
  7. Model danych:Tabele Transactions i Product
    Data model following Join.

    Wszystkie pola tabel Transactions i Salesman są teraz połączone w jednej tabeli Transactions.

Uwaga: Aby dowiedzieć się więcej na temat korzystania z Join, zapoznaj się z tymi artykułami na blogu Qlik Community: To Join or not to Join, Mapping as an Alternative to Joining (Łaczyć czy nie łączyć, Mapowanie jako alternatywa do łączenia). Działania są omawiane w kontekście rozwiązania QlikView. Logika jednak odnosi się również do Qlik Sense.

Keep

Jedną z kluczowych zalet aplikacji Qlik Sense jest możliwość tworzenia skojarzeń między tabelami zamiast wykonywania sprzężeń. Pozwala to ograniczyć wymagania pamięciowe, przyspiesza działanie programu i daje ogromną elastyczność działania. Funkcję Keep zaprojektowano z myślą o ograniczeniu liczby sytuacji wymagających używania jawnych połączeń.

Przedrostek Keep pomiędzy dwoma instrukcjami LOAD lub SELECT redukuje jedną lub obie tabele do przecięcia danych tabeli przed zapisaniem ich w Qlik Sense. Prefiks Keep musi być zawsze poprzedzony jednym z następujących słów kluczowych: Inner, Left lub Right. Rekordy są wybierane z tabel w taki sam sposób, jak przy analogicznym sprzężeniu. Tabele nie są jednak sprzęgane i pozostaną zapisane w aplikacji Qlik Sense jako dwie odrębne tabele nazwane.

Więcej informacji zawiera temat Keep.

Inner

Prefiksy Join i Keep skryptu ładowania danych mogą być poprzedzone prefiksem Inner.

Podanie go przed prefiksem Join oznacza, że do tabel ma być zastosowane sprzężenie wewnętrzne. Wynikowa tabela zawiera tylko te kombinacje wierszy z obu tabel, które mają po obu stronach pełen zestaw danych.

Podanie go przed prefiksem Keep oznacza, że przed zapisaniem wyniku w aplikacji Qlik Sense tabele mają zostać zredukowane do części wspólnej danych.

Example:  

W tych przykładach użyjemy tabel źródłowych Table1 i Table2.

Należy pamiętać, że są to tylko przykłady. Nie istnieją żadne ćwiczenia dodatkowe, które należy wykonać w Qlik Sense.

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

Inner Join

Najpierw wykonamy na tabelach operację Inner Join, której wynikiem będzie tabela VTable zawierająca tylko jeden wiersz (jedyny rekord występujący w obu tabelach) z połączonymi danymi z obu tabel.

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

VTable
A B C
1 aa xx

Inner Keep

Natomiast jeśli na tabelach zostanie wykonana operacja Inner Keep, nadal będziemy mieli dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole A.

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

VTab1
A B
1 aa
VTab2
A C
1 xx

Więcej informacji zawiera temat Inner.

Left

Prefiksy Join i Keep skryptu ładowania danych mogą być poprzedzone prefiksem left.

Podanie go przed prefiksem Join oznacza, że do tabel ma być zastosowane sprzężenie lewe (Left Join). Wynikowa tabela zawiera tylko te kombinacje wierszy z obu tabel, które mają pełen zestaw danych z pierwszej tabeli.

Podanie go przed prefiksem Keep oznacza, że przed zapisaniem wyniku w aplikacji Qlik Sense druga tabela ma zostać zredukowana do części wspólnej z pierwszą tabelą.

Example:  

W tych przykładach użyjemy tabel źródłowych Table1 i Table2.

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

Najpierw wykonamy na tabelach operację Left Join, której wynikiem będzie tabela VTable zawierająca wszystkie wiersze z tabeli Table1 połączone z polami z pasujących wierszy w tabeli Table2.

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

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

Natomiast jeśli na tabelach zostanie wykonana operacja Left Keep, nadal będziemy mieli dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole 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

Więcej informacji zawiera temat Left.

Right

Prefiksy Join i Keep języka skryptowego Qlik Sense mogą być poprzedzone prefiksem right.

Podanie go przed prefiksem Join oznacza, że do tabel ma być zastosowane sprzężenie prawe (Right Join). Wynikowa tabela zawiera tylko te kombinacje wierszy z obu tabel, które mają pełen zestaw danych z drugiej tabeli.

Podanie go przed prefiksem Keep oznacza, że przed zapisaniem wyniku w aplikacji Qlik Sense pierwsza tabela ma zostać zredukowana do części wspólnej z drugą tabelą.

Example:  

W tych przykładach użyjemy tabel źródłowych Table1 i Table2.

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

Najpierw wykonamy na tabelach operację Right Join, której wynikiem będzie tabela VTable zawierająca wszystkie wiersze z tabeli Table2 połączone z polami z pasujących wierszy w tabeli Table1.

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

VTable
A B C
1 aa xx
4 - yy

Natomiast jeśli na tabelach zostanie wykonana operacja Right Keep, nadal będziemy mieli dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole A.

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

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

Więcej informacji zawiera temat Right.