Join
join 前置詞能夠將載入的表格與現有的具名表格或先前最後建立的資料表聯結。
聯結資料的效果是透過其他欄位或屬性集合延伸目標表格,亦即尚未出現在目標表格中的內容。來源資料集和目標表格之間的任何一般欄位名稱用來理解如何關聯新的傳入記錄。這通常稱為「自然聯結」。Qlik 聯結操作會導致產生的目標表格有比一開始更多或更少的記錄,取決於聯結關聯的獨特性和採用的聯結類型。
有四種聯結類型:
左聯結
左聯結是最常見的聯結類型。例如,若您有交易資料集並想要組合參考資料集,您通常會使用 Left Join。您會先載入交易表格,然後載入參考資料集,同時透過 Left Join 前置詞聯結到已載入的交易表格。Left Join 會將所有交易保持原狀並新增找到相符項目的補充參考資料欄位。
內聯結
若您有兩個資料集,而您只在乎有相符關聯的任何結果,請考慮使用 Inner Join。若找不到相符內容,這將會從載入的來源資料和目標表格排除所有記錄。因此,這可能會讓目標表格的記錄比聯結操作發生之前更少。
外聯結
若您需要保留兩個目標記錄和所有傳入記錄,請使用 Outer Join。若找不到相符內容,仍會保留每個記錄集合,而來自聯結另一側的欄位將會保持未填入 (null)。
若省略類型關鍵字,預設聯結類型是外部聯結。
右聯結
此聯結類型保留所有即將載入的記錄,同時將透過聯結設為目標的記錄減少為只有在傳入記錄中有相符關聯的記錄。此為合適的聯結類型,有時候用來將已預先載入的記錄表格裁剪為所需的子集。
語法:
[inner | outer | left | right ]Join [ (tablename ) ]( loadstatement | selectstatement )
引數 | 描述 |
---|---|
tablename | 要與所載入表格比較的具名表格。 |
loadstatement或 selectstatement | 已載入表格的 LOAD 或 SELECT 陳述式。 |
這些主題可協助您使用此函數:
主題 | 描述 |
---|---|
在 Manage data使用 Join 與 Keep 合併表格 | 此主題進一步說明「聯結」和「保留」資料集的概念。 |
Keep | Keep 載入前置詞類似於 Join 前置詞,但這不會合併來源和目標資料集。而是會根據採用的操作類型 (內、外、左或右) 裁剪每個資料集。 |
範例 1 - 左聯結:以參考資料集豐富目標表格
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
呈現變更記錄的資料集,這載入到名為 Changes 的表格中。這包括狀態 ID 索引鍵欄位。
-
呈現變更狀態的第二個資料集,這聯結左側 Join 載入前置詞,以載入並合併原始變更記錄。
此左聯結確保變更記錄在新增狀態屬性時保持不變,這會根據共同狀態 ID 找到傳入狀態記錄中的相符內容。
載入指令碼
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Status:
Left Join (Changes)
Load * inline [
Status ID Status Sub Status
1 Open Not Started
2 Open Started
3 Closed Completed
4 Closed Cancelled
5 Closed Obsolete
] (delimiter is '\t');
結果
開啟資料模型檢視器並注意資料模型形狀。僅存在一個去正規化的表格。這合併所有原始變更記錄,並在每個變更記錄上聯結相符的狀態屬性。
變更 |
---|
變更 ID |
狀態 ID |
已排程開始日期 |
已排程結束日期 |
商務影響 |
狀態 |
子狀態 |
若您在資料模型檢視器中展開預覽視窗,您將會看見組織為表格之完整結果集合的一部分:
變更 ID |
狀態 ID | 已排程開始日期 | 已排程結束日期 | 商務影響 | 狀態 | 子狀態 |
---|---|---|---|---|---|---|
10030 |
4 | 19/01/2022 | 23/02/2022 | 無 | 已關閉 | 已取消 |
10031 |
3 | 20/01/2022 | 25/03/2022 | 低 | 已關閉 | 已完成 |
10015 |
3 | 04/01/2022 | 15/02/2022 | 低 | 已關閉 | 已完成 |
10103 |
1 | 02/04/2022 | 29/05/2022 | 中等 | 開啟 | 未開始 |
10116 | 1 | 15/04/2022 | 24/04/2022 | 無 | 開啟 | 未開始 |
10134 |
1 | 03/05/2022 | 08/07/2022 | 低 | 開啟 | 未開始 |
10264 | 1 | 10/09/2022 | 17/10/2022 | 中等 | 開啟 | 未開始 |
10040 |
1 | 29/01/2022 | 22/04/2022 | 無 | 開啟 | 未開始 |
10323 | 1 | 08/11/2022 | 26/11/2022 | 高 | 開啟 | 未開始 |
10187 | 2 | 25/06/2022 | 24/08/2022 | 低 | 開啟 | 已開始 |
10185 | 2 | 23/06/2022 | 08/09/2022 | 無 | 開啟 | 已開始 |
10220 | 2 | 28/07/2022 | 06/09/2022 | 無 | 開啟 | 已開始 |
10326 | 2 | 11/11/2022 | 05/12/2022 | 無 | 開啟 | 已開始 |
10138 |
2 | 07/05/2022 | 03/08/2022 | 無 | 開啟 | 已開始 |
10334 | 2 | 19/11/2022 | 06/02/2023 | 低 | 開啟 | 已開始 |
由於狀態表格中的第五列 (狀態 ID:「5」,狀態:「已關閉」,子狀態:「已過時」) 沒有對應至變更表格中的任何記錄,此列的資訊不會出現在上述的結果集合中。
返回資料載入編輯器。載入資料並開啟工作表。建立新的表格並將此欄位新增為維度: Status。
新增此量值:
=Count([Change ID])
現在您可以依狀態檢查變更數量。
狀態 | =Count([Change ID]) |
---|---|
開啟 | 12 |
已關閉 | 3 |
範例 2 – 內聯結:僅合併相符記錄
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
呈現變更記錄的資料集,這載入到名為 Changes 的表格中。
-
呈現變更記錄的第二個資料集,這源自來源系統 JIRA。這聯結 Inner Join 載入前置詞,以載入並合併原始記錄。
此 Inner Join 確保僅保留在兩個資料集中找到的五個變更記錄。
載入指令碼
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
JIRA_changes:
Inner Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10000 JIRA
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
20000 TFS
] (delimiter is '\t');
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
Source System
-
Change ID
-
Business Impact
現在您可以檢查五個產生的記錄。來自 Inner Join 的結果表格只包含在兩個資料集中具有相符資訊的記錄。
來源系統 | 變更 ID | 商務影響 |
---|---|---|
JIRA | 10030 | 無 |
JIRA | 10134 | 低 |
JIRA | 10220 | 無 |
JIRA | 10323 | 高 |
JIRA | 10334 | 低 |
範例 3 – 外聯結:合併重疊記錄集合
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
呈現變更記錄的資料集,這載入到名為 Changes 的表格中。
-
呈現變更記錄的第二個資料集,這源自來源系統 JIRA,這聯結 Outer Join 載入前置詞,以載入並合併原始記錄。
這確保保留來自兩個資料集的所有重疊變更記錄。
載入指令碼
// 8 Change records
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
] (delimiter is '\t');
// 6 Change records
JIRA_changes:
Outer Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
10597 JIRA
] (delimiter is '\t');
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
Source System
-
Change ID
-
Business Impact
現在您可以檢查 10 個產生的記錄。
來源系統 | 變更 ID | 商務影響 |
---|---|---|
JIRA | 10030 | 無 |
JIRA | 10134 | 低 |
JIRA | 10220 | 無 |
JIRA | 10323 | - |
JIRA | 10334 | 低 |
JIRA | 10597 | - |
- | 10015 | 低 |
- | 10031 | 低 |
- | 10040 | 無 |
- | 10138 | 無 |
範例 4 – 右聯結:按第二主要資料集裁剪目標表格
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
呈現變更記錄的資料集,這載入到名為 Changes 的表格中。
-
第二個資料集呈現源自來源系統 Teamwork 的變更記錄。這與 Right Join 載入前置詞聯結,以透過原始記錄載入並合併。
若目標表格沒有相符的 Change ID,這確保僅保留 Teamwork 變更記錄,同時不失去任何 Teamwork 記錄。
載入指令碼
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Teamwork_changes:
Right Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10040 Teamwork
10015 Teamwork
10103 Teamwork
10031 Teamwork
50231 Teamwork
] (delimiter is '\t');
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
Source System
-
Change ID
-
Business Impact
現在您可以檢查五個產生的記錄。
來源系統 | 變更 ID | 商務影響 |
---|---|---|
團隊合作 | 10015 | 低 |
團隊合作 | 10031 | 低 |
團隊合作 | 10040 | 無 |
團隊合作 | 10103 | 中等 |
團隊合作 | 50231 | - |