跳到主要內容 跳至補充內容

使用 JoinKeep 來合併表格

「聯結」是將兩個表格結合成一個表格的操作。產生的表格記錄是原始表格記錄的組合,通常以這種方式在所產生表格中形成任何指定組合的兩個記錄,會具有一或數個通用欄位的通用值,也稱為「自然聯結」。在 QlikView 中,可在指令碼中建立聯結,進而產生邏輯表。

之後,QlikView 邏輯不會看到個別的表格,而是聯結的結果,亦即單一的內部表格。在某些情況下這是必要的,但會有一些缺點:

  • 載入的表格通常會變得較大,使得 QlikView 運作較慢。
  • 某些資訊可能會遺失:原始表格內的頻率 (記錄筆數) 可能不再可用。

Keep 功能可將兩個表格的其中一個或兩個都先減少到表格資料的交集,然後才儲存到 QlikView 中,這是專門設計用來減少需要使用明確聯結的情況。

資訊備註本手冊中的「聯結」一詞通常指的是內部表格建立之前所進行的聯結。不過,在內部表格建立之後所進行的關聯基本上也算是聯結。

Join

進行聯結的最簡單方式,是在指令碼中使用 Join 前置詞,如此會將內部表格聯結到另一個具名的表格,或是聯結到上一個建立的表格。這樣的聯結算是 outer join,會從兩個表格建立所有可能的值組合。

範例:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

產生的內部表格會有欄位 abcd。而記錄筆數會視這兩個表格的欄位值而定。

資訊備註要聯結之欄位的名稱必須完全相同。要聯結的欄位數目可任意。通常表格應會有一個或數個共同欄位。若無共同的欄位,則會呈現表格的笛卡兒座標的乘積。也可能所有欄位都是共同的,但這通常毫無意義。除非 Join 陳述式中指定先前已載入表格的表格名稱,否則 Join 前置詞會使用上一個建立的表格。因此,兩個陳述式的順序不可任意排序。

Keep

QlikView 的其中一個主要特色是可在表格之間建立關聯而不是聯結,這可降低所佔的記憶體空間、提高速度,並帶來極大的彈性。Keep 功能是專門用來減少需要使用明確聯結的情況。

兩個 LOADSELECT 陳述式之間的 Keep 前置詞,可將這兩個表格的其中一個或兩個都先減少到表格資料的交集,然後才儲存到 QlikView 中。Keep 前置詞前面一律必須加上 InnerLeftRight 前置詞的其中一個。從表格選取記錄的方式和對應聯結所使用的方式相同。不過,兩個表格並未聯結,而是以兩個個別的具名表格儲存在 QlikView 中。

內部

QlikView 指令碼語言中,JoinKeep 前置詞的前面可以加上 Inner 前置詞。

若加在 Join 之前,是指定兩個表格之間的聯結必須為內部聯結。產生的表格僅會包含兩個表格之間,具備兩邊完整資料集的組合。

若加在 Keep 之前,是指定兩個表格應先減少到其共同交集,然後才儲存到 QlikView 中。

範例:  

在此範例中,我們使用來源表格 Table1Table2

Inner example tables, with one record appearing in both tables
Inner 範例來源表格

首先,我們會在表格上執行 Inner Join,產生 VTable,僅包含一個列,存在於兩個表格中的唯一記錄,擁有從兩個表格合併的資料。

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

Inner Join example table, with the one record that appeared in both tables
Inner Join 範例

如果我們改而執行 Inner Keep,您仍然會有兩個表格。兩個表格自然是透過共同欄位 A 建立關聯。

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

Inner Keep example tables, both tables reduced to the one record that appeared in both tables
Inner Keep 範例

Left

QlikView 指令碼語言中,JoinKeep 前置詞的前面可以加上 left 前置詞。

若加在 Join 之前,是指定兩個表格之間的聯結必須為左方聯結。產生的表格僅會包含兩個表格之間,具備第一個表格完整資料集的組合。

若加在 Keep 之前,是指定第二個表格應先減少到與第一個表格的共同交集,然後才儲存到 QlikView 中。

範例:  

在此範例中,我們使用來源表格 Table1Table2

Left example tables, with one record that appears in both tables
Left 範例來源表格

首先,我們會在表格上執行 Left Join,產生 VTable,包含來自 Table1 的所有列,合併 Table2 中符合列的欄位。

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

Left Join example table, with all records from the first table and the one record that appeared in both tables added from the second table
Left Join 範例

如果我們改而執行 Left Keep,您仍然會有兩個表格。兩個表格自然是透過共同欄位 A 建立關聯。

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

Left Keep example tables, with the first table unchanged and the second table containing only the one record that appeared in both tables
Left Keep 範例

Right

QlikView 指令碼語言中,JoinKeep 前置詞的前面可以加上 right 前置詞。

若加在 Join 之前,是指定兩個表格之間的聯結必須為右方聯結。產生的表格僅會包含兩個表格之間,具備第二個表格完整資料集的組合。

若加在 Keep 之前,是指定第一個表格應先減少到與第二個表格的共同交集,然後才儲存到 QlikView 中。

範例:  

在此範例中,我們使用來源表格 Table1Table2

Right example tables, with one record that appears in both tables
Right 範例來源表格

首先,我們會在表格上執行 Right Join,產生 VTable,包含來自 Table2 的所有列,合併 Table1 中符合列的欄位。

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

Right Join example table, with all records from the second table and the one record that appeared in both tables added from the first table
Right Join 範例

如果我們改而執行 Right Keep,您仍然會有兩個表格。兩個表格自然是透過共同欄位 A 建立關聯。

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

Right Keep example tables, with the second table unchanged and the first table containing only the one record that appeared in both tables
Right Keep 範例

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!

加入分析現代化計畫

Remove banner from view

透過分析現代化程式進行現代化而不犧牲寶貴的 QlikView 應用程式。 按一下這裡 取得更多資訊或聯繫: ampquestions@qlik.com