如果查詢中包含多個來源,請在「構建器」中建立關聯性,藉此以實體編號、帳號或部門等共享值作為基礎,定義如何合併其記錄。
注意:在 SQL 編輯器中,使用 JOIN
(聯結)子句定義查詢來源之間的關係。
概觀
例如,假設您的查詢包含「訂單」事實資料表和「客戶」維度資料表作為來源。您可以在「關係」索引標籤上定義如何建立訂單的關聯性:
訂單 ID | 客戶編號 | 訂單日期 |
---|---|---|
111222 | 001 | 01/02/2021 |
121212 | 010 | 02/01/2021 |
212121 | 100 | 01/12/2021 |
致客戶:
客戶編號 | 客戶姓名 | 區域 |
---|---|---|
001 | AAA 乾洗店 | 北部 |
010 | Wayne Technology | 東部 |
011 | Señor Taqueria | 西 |
提示:要在維度資料表中標識具有唯一值的資料欄(例如客戶 ID),請將其標記為索引鍵資料欄。
由於這兩個表均包括客戶編號,您可以基於其各自的客戶編號列建立關係,並選擇如何結合(接合)他們的記錄。
左聯結關聯性返回第一個來源(位於左側)的所有記錄,以及任何同時與另一個來源相匹配的記錄。
提示: 為避免在左方聯結中出現重複,請確保第二個來源資料欄(在關係的右側)包含唯一值,例如維度資料表的索引鍵資料欄。
例如,在我們的「訂單」與「客戶」表格之間的關係中,左聯結會傳回所有訂單,對於客戶 ID 在「客戶」表格相符的訂單,則提供額外詳細資訊。訂單的客戶 ID 若與「客戶」表格中的客戶 ID 不相符,則該訂單會包含其他客戶資料的空值。
訂單 ID | 客戶編號 | 客戶姓名 | 訂單日期 | 區域 |
---|---|---|---|---|
111222 | 001 | AAA 乾洗店 | 01/02/2021 | 北部 |
121212 | 010 | Wayne Technology | 02/01/2021 | 東部 |
212121 | 100 | -------------------- | 01/12/2021 | ------- |
右聯結關聯性返回第二個來源(位於右側)的所有記錄,以及任何同時與另一個來源相匹配的記錄。
提示:為避免在右方聯結中出現重複,請確保第二個來源資料欄(在關係的左側)包含唯一值,例如維度資料表的索引鍵資料欄。
對於「訂單」和「客戶」表,「右方聯結」將傳回所有客戶,以及「訂單」表中 ID 相符的客戶的其他詳細資訊。客戶的 ID 若與「訂單」表格中的 ID 不相符,則該客戶會包含其他訂單資料的空值。
訂單 ID | 客戶編號 | 客戶姓名 | 訂單日期 | 區域 |
---|---|---|---|---|
111222 | 001 | AAA 乾洗店 | 01/02/2021 | 北部 |
121212 | 010 | Wayne Technology | 02/01/2021 | 東部 |
-------- | 011 | Señor Taqueria | ------------- | 西 |
內部聯結關聯性僅返回同時出現在兩個來源中的記錄。
在我們的「訂單」與「客戶」表的關聯性中,內部聯結僅返回編號在兩個來源中均匹配的客戶訂單。
訂單 ID | 客戶編號 | 客戶姓名 | 訂單日期 | 區域 |
---|---|---|---|---|
111222 | 001 | AAA 乾洗店 | 01/02/2021 | 北部 |
121212 | 010 | Wayne Technology | 02/01/2021 | 東部 |
完全聯結關聯性將從任一來源返回所有記錄。
在我們的訂單和客戶表的範例中,完全聯結會傳回所有訂單和客戶。紀錄的客戶 ID 若僅在一個來源中相符,則該紀錄包含遺漏資料的空值。
訂單 ID | 客戶編號 | 客戶姓名 | 訂單日期 | 區域 |
---|---|---|---|---|
111222 | 001 | AAA 乾洗店 | 01/02/2021 | 北部 |
121212 | 010 | Wayne Technology | 02/01/2021 | 東部 |
-------- | 011 | Señor Taqueria | ------------- | 西 |
212121 | 100 | -------------------- | 01/12/2021 | ------- |
在「關係」索引標籤上,可以定義查詢的多個來源如何互相關聯。為了定義此關聯性,您需要比對來源之間共享的資料,並選擇如何在查詢結果中將紀錄建立聯結。
注意:查詢關係是累積性的;它們是相互建立的。一個聯結中的來源確定可聯結到其他來源的資料欄。
第 1 步:指定要聯結的來源
若要在查詢中定義來源與其他來源的關聯性,請將其從「來源」(Sources) 拖曳到「關聯性」(Relationships) 索引標籤。
- 若要定義查詢來源之間的第一個關聯性,請將兩個來源從「來源」(Sources) 拖曳到「聯結 1」(Join 1)。
- 要定義來源與上一個聯結之來源的關係,請按一下「新增另一個聯結」,然後將來源從「來源」拖曳到新聯結。
注意:如果查詢有多個聯結,請按它們應該出現的順序加以排列,因為每個聯結都取決於前一個聯結的來源。要重新放置聯結,請從其功能表中選取「上移 」或「下移 」。若要刪除聯接(例如,如果查詢不再包含其來源),請從其功能表中選取「移除 」。
第 2 步:指定來源的關聯方式
若要定義查詢來源之間的關聯性,您可以根據以下項目來對應共享值:
- 具有對應資料的列
- 計算欄位,根據需要調整來源的值,以準確地與另一個來源相匹配
提示:您只能聯結相同資料類型的資料欄。若要配對不同資料類型的資料,例如帳戶 ID 在一個來源中是整數,而在另一個來源中是文字字串,請從「欄位屬性」面板編輯資料欄的類型。
在聯結中,從每個來源中選擇對應的列,並根據記錄的值選擇要如何配對記錄。
運算子 | 說明 |
---|---|
等於 (=) | 配對兩個來源中具有相同值的記錄 |
不等於 (!=) | 配對兩個來源中具有不同值的記錄,例如將帳戶 ID 對應帳戶名稱 |
大於 (>) | 當左側來源的數字或日期/時間值大於或晚於右側來源的值時,配對記錄 |
大於或等於 (>=) | 當左側來源的數字或日期/時間值等於、大於或晚於右側來源的值時,配對記錄 |
小於 (<) | 當左側來源的數字或日期/時間值小於或早於右側來源的值時,配對記錄 |
小於或等於 (<=) | 當左側來源的數字或日期/時間值等於、小於或早於右側來源的值時,配對記錄 |
若要在來源之間準確對應值,可以將計算套用於來源資料欄。例如,若要對應至「帳戶對應」維度資料表中的帳戶,您可能需要:
- 調整單一來源列中的值,例如從「試算」事實資料表中的帳戶編號中擷取前六位數字:SS_LEFT(tb.account, 6)
- 使用來自多個來源列的值,例如分別組合或串聯來自之前聯結的「試算」事實資料表和「實體對應」維度表的帳戶編號和 ID:CONCAT(tb.account,entity.id)
- 在資料欄的值中定義通用模式,例如將帳號與試算表事實資料表中的前綴或後綴隔離—
tb.account LIKE __1005%
注意:要定義模式,可以使用萬用字元來表示要忽略的字元,底線 (
_
) 表示單個字元,或百分比符號 (%
) 表示無字元或多個字元。
若要將計算方式套用至來源的值:
- 在聯結中,選擇具有要調整的值的來源下的計算欄位。
- 在「欄位屬性」面板上,將要包含在計算中的資料欄從「來源」拖曳到「包含的資料欄」。
注意:為確保正確的 SQL,請僅包含所選來源中的資料欄。
- 在「計算方式」(Calculation) 下,編寫結構化查詢語言 (SQL) 操作來應用於列的值。
- 若要引用計算中的資料欄,請按一下它或從「包含的資料欄」下的功能表中選取「包括在計算中」,或在括號中輸入其編號,例如
{1}+{2}
。 - 若要將 SQL 運算子或函數快速新增至計算方式中,請從「計算方式」(Calculation) 選單中選取。
- 若要引用計算中的資料欄,請按一下它或從「包含的資料欄」下的功能表中選取「包括在計算中」,或在括號中輸入其編號,例如
- 在聯結中,選擇要如何根據聯結列的值來配對記錄:
運算子 說明 等於 (=) 配對兩個來源中具有相同值的記錄 不等於 (!=) 配對兩個來源中具有不同值的記錄,例如將帳戶 ID 對應帳戶名稱 近似 如果計算欄位定義了帶有萬用字元的模式,便將帶有值的記錄與該模式配對 不像 如果計算欄位定義了帶有萬用字元的模式,便不將帶有值的記錄與該模式配對 大於 (>) 當左側來源的數字或日期/時間值大於或晚於右側來源的值時,配對記錄 大於或等於 (>=) 當左側來源的數字或日期/時間值等於、大於或晚於右側來源的值時,配對記錄 小於 (<) 當左側來源的數字或日期/時間值小於或早於右側來源的值時,配對記錄 小於或等於 (<=) 當左側來源的數字或日期/時間值等於、小於或早於右側來源的值時,配對記錄
步驟 3. 定義任何複合聯結
單個聯結可以在其來源之間對應多個值。對應聯結中的其他值組:
- 按一下「新增欄位」(Add field)。
- 指定要在來源之間對應的其他列或計算欄位。
- 選擇要聯結多個對應值(「交集」(And))還是只根據資料聯結特定值(「聯集」(Or))。
如果一個來源中的多個值分別對應另一個來源中不同的值,請選擇「交集」(And) 以根據多個對應值來配對記錄。
例如,如果「試算」事實資料表中的列對應到「帳戶對應」維度表中的帳戶編號和實體索引鍵資料欄的組合,請按一下「交集」(And) 並聯結表格的應列。
注意:在 SQL 編輯器中,關係顯示為 JOIN ON (TB.entity = AccountMap.entity) AND (TB.account = AccountMap.account)
如果一個來源的值可以根據資料對應至另一個來源中的多個值,請選取「聯集」來根據特定對應值配對紀錄。
例如,如果「帳戶對應」維度表中的「帳戶」(Account) 索引鍵資料欄對應「試算」事實資料表中的「帳戶」(Account) 或「子帳戶」(Sub-account) 列,請按一下「聯集」(Or) 並將索引鍵資料欄聯結到兩個事實資料表的列。
注意:在 SQL 編輯器中,關係顯示為 JOIN ON (AccountMap.account = TB.account) OR (AccountMap.account = TB.subaccount)
注意: 如果您的複合聯結同時包含「交集」和「聯集」運算子,便會符合由「交集」分隔的所有條件的紀錄,以及任何滿足由「聯集」分隔的條件紀錄。
步驟 4. 選擇聯結來源記錄的方式
在聯結中,選擇要如何組合在查詢結果中來源的記錄:
聯結 | 傳回 |
---|---|
左方聯結 | 聯結中左方來源的所有記錄,以及任何符合右方來源的記錄 |
右方聯結 | 聯結中右方來源的所有記錄,以及任何符合左方來源的記錄 |
內部聯結 | 僅包含與兩個來源均相符的記錄 |
完整聯結 | 來自任一來源的所有記錄 |
定義所有查詢來源之間的關聯性後,請按一下「儲存」(Save)。