Łą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 QlikView połączenia mogą być wykonywane w skrypcie, co powoduje tworzenie tabel logicznych.

Logika aplikacji QlikView 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 QlikView 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 QlikView.

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 outer join, które daje wszystkie możliwe kombinacje wartości z obu tabel.

Przykład:  

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.

Keep

Jedną z kluczowych zalet aplikacji QlikView 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 sprzężeń.

Zastosowanie prefiksu Keep między dwiema instrukcjami LOAD lub SELECT powoduje zredukowanie jednej lub obu tabel do części wspólnej danych przez zapisaniem wyniku w aplikacji QlikView. 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 QlikView jako dwie odrębne tabele nazwane.

Inner

Prefiksy Join i Keep języka skryptowego QlikView 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 QlikView tabele mają zostać zredukowane do części wspólnej danych.

Przykład:  

W tych przykładach użyjemy tabel Table1 i Table2:

Tabele źródłowe do przykładów prefiksu Inner

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;

Przykład operacji Inner Join

Jeśli zamiast tego wykonamy operację Inner Keep, będziemy nadal mieć dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole A.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

Przykład operacji Inner Keep

Left

Prefiksy Join i Keep języka skryptowego QlikView mogą być poprzedzone prefiksem left.

Podanie go przed prefiksem Join oznacza, że do tabel ma być zastosowane sprzężenie lewe. 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 QlikView druga tabela ma zostać zredukowana do części wspólnej z pierwszą tabelą.

Przykład:  

W tych przykładach użyjemy tabel Table1 i Table2:

Tabele źródłowe do przykładów prefiksu Left

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;

Przykład operacji Left Join

Jeśli zamiast tego wykonamy operację Left Keep, będziemy nadal mieć dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole A.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

Przykład operacji Left Keep

Right

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

Podanie go przed prefiksem Join oznacza, że do tabel ma być zastosowane sprzężenie prawe. 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 QlikView pierwsza tabela ma zostać zredukowana do części wspólnej z drugą tabelą.

Przykład:  

W tych przykładach użyjemy tabel Table1 i Table2:

Tabele źródłowe do przykładów prefiksu Right

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;

Przykład operacji Right Join

Jeśli zamiast tego wykonamy operację Right Keep, będziemy nadal mieć dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole A.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

Przykład operacji Right Keep