Łą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.
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.
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:

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;

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;

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:

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;

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;

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:

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;

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;
