共用方式為


一對一關聯性指導方針

本文的目標讀者是使用 Power BI Desktop 的數據模型師。 其能為您提供處理一對一模型關聯性的指導方針。 當兩個資料表個別包含具有通用與唯一值的資料行時,便可以建立一對一關聯性。

注意

本文並未涵蓋模型關聯性簡介。 如果您對關聯性、其屬性或如何進行設定不是很熟悉,建議您先閱讀 Power BI Desktop 中的模型關聯性一文。

您也必須了解星型結構描述設計。 如需詳細資訊,請參閱了解星型結構描述及其對 Power BI 的重要性

有兩個涉及一對一關聯性的案例:

  • 變質維度:您可以從 事實數據表衍生 變質維度

  • 資料列跨越資料表:單一商務實體或主體可能因資料來源於不同的數據存放區而被載入為兩個(或更多)模型資料表。 此情況對於 維度表來說可能很常見。 例如,主要產品詳細資料會儲存在營運銷售系統中,而補充產品詳細資料則儲存在不同的來源中。

    不過,不尋常的是,您會將兩個事實數據表與一對一關聯性建立關聯性。 這是因為這兩個事實數據表都需要有相同的維度和粒度。 此外,每個事實數據表都需要唯一的數據行,才能建立模型關聯性。

變質維度

當事實數據表中的數據行用於篩選或分組時,您可以考慮在個別數據表中提供這些數據行。 如此一來,您會將用於篩選或分組的數據行與用來摘要事實數據列的數據行分開。 此分隔可以:

  • 減少儲存空間。
  • 簡化模型計算。
  • 有助於改善查詢效能。
  • 提供更直觀的 數據 窗格體驗,讓報表製作者獲得更好的使用感受。

請考慮名為 Sales 的源數據表,將銷售訂單明細參考詳細數據儲存在兩個數據行中。

圖表,其中顯示 Sales 變質維度數據表的數據表數據列。下列段落將說明設計。

OrderNumber 欄位儲存訂單號碼,而 OrderLineNumber 欄位儲存訂單中一連串的行。

在下圖中您會看到訂單編號和訂單行號欄尚未載入到 Sales 表。 相反地,其值用來建立名為 OrderLineNumberID 欄。 (索引鍵值的計算方式是將訂單號碼乘以 1000,然後再加上訂單行號。)

顯示兩個數據表的圖表:Sales 和 Sales Order。一對一關聯性與 [訂單明細編號標識符] 數據行相關。

Sales Order 維度表為報表作者提供豐富的體驗,包含兩個欄位:Sales OrderSales Order Line。 這些特定欄位支援需要篩選、分組或向下鑽取訂單和訂單行的報表設計。

由於 Sales Order 數據表衍生自銷售數據,因此每個數據表中的數據列數目應該完全相同。 此外,每個 OrderLineNumberID 欄之間應該有相符的值。

跨資料表的資料列資料

請考慮包含兩個一對一相關維度資料表的範例:ProductProduct Category。 每個數據表都代表匯入的數據,並具有包含唯一值的 SKU(庫存單位)數據行。

以下是這兩個資料表的部分模型圖表。

圖表顯示了一個模型,其中包含兩個表,並且列數據跨越這些表。下列段落將說明設計。

第一個資料表名為 Product,其中包含三個數據行:ColorProductSKU。 第二個資料表名為 Product Category,其中包含兩個數據行:CategorySKU。 一對一關聯將兩個 SKU 欄位關聯起來。 關聯性會朝兩個方向進行篩選,此情況在一對一關聯性中一律會發生。

為了協助描述關聯性篩選傳播的運作方式,下圖顯示一些數據表數據列。 此文章中的所有範例都是以此資料為基礎。

圖表顯示產品和產品類別表及一些數據行。下列段落將說明行的詳細資料。

下列項目符號清單描述這兩個資料表的資料列詳細資料:

  • Product 資料表有三個資料列:
    • SKU CL-01ProductT恤Color綠色
    • SKU CL-02Product牛仔褲Color
    • SKU AC-01Product帽子Color藍色
  • Product Category 表格有兩列:
    • SKU CL-01Category服裝
    • SKU AC-01Category配件

請注意,Product Category 資料表不包含產品 SKU CL-02的資料列。 我們將會在此文章稍後討論遺漏此資料列的後果。

在 [數據] 窗格中,報表作者會在兩個數據表中尋找產品相關字段:ProductProduct Category。 讓我們看看將來自兩個資料表的欄位新增到資料表視覺效果時,會發生什麼事。 在此範例中,SKU 數據行是從 Product 數據表來源。

顯示 [資料] 窗格的示意圖,其中包含兩個數據表,以及包含四個欄的表格視覺效果。產品 SKU CL-02 的 Category 值是空白。

請注意,產品 SKU Category 值為 BLANK。 這是因為此產品的 Product Category 數據表中沒有對應的數據列。

建議

在資料列資料會跨越模型資料表時,我們建議您盡可能避免建立一對一模型關聯性。 這是因為此設計可以:

  • 參與數據窗格雜亂,列出比必要更多的數據表。
  • 讓報表作者難以尋找相關的欄位,因為它們會分散到多個數據表。
  • 限制建立階層的能力,因為其層級必須基於相同數據表中的欄位。
  • 當數據表之間沒有完全相符的數據列時,產生非預期的結果。

視一對一關聯性為「來源群組內部」或「跨來源群組」而定,特定建議會有所不同。 如需關聯性評估的詳細資訊,請參閱 Power BI Desktop中的 模型關聯性。

來源群組內部的一對一關聯性

當資料表之間存在一對一的「來源群組內部」關聯性時,建議將資料合併成單一模型資料表。 您可以藉由合併 Power Query 查詢來執行此動作。

下列步驟提供合併和模型化一對一相關數據的方法。

  1. 合併查詢:在結合兩個查詢時,請考慮每個查詢中資料的完整性。 如果某個查詢包含一組完整的資料列 (例如主要清單),請將另一個查詢與其合併。 將合併轉換設定為使用 左外部聯結,這是預設聯結類型。 此聯結類型能確保您會保留第一個查詢的所有資料列,並以第二個查詢中任何相符的資料列來加以補充。 將第二個查詢的所有必要資料行展開至第一個查詢。

    顯示數據合併至單一產品維度表的圖表。

  2. 停用查詢載入:請務必停用第二個查詢的載入。 如此一來,其便不會將結果載入為模型資料表。 此組態可減少數據模型記憶體大小,並協助將 [ 資料 ] 窗格取消整理。

    在我們的範例中,報表作者現在會在 [Product] 窗格中尋找名為 的單一數據表。 其包含所有產品相關欄位。

  3. 取代遺漏值:如果第二個查詢具有不相符的數據列,Null 值會出現在它引進的數據行中。 適當時,請考慮使用令牌值取代 Null 值。 當報表作者會依資料行值進行篩選或分組時,取代遺漏值便特別重要,因為報表視覺效果中可能會出現空白。

    在下圖中,請注意,產品 SKU CL-02 的類別現在顯示為 [未定義]。 在查詢中,將會以此語彙基元文字值來取代 Null 類別。

    顯示 [產品] 資料表之 [數據] 窗格的圖表。它也會顯示具有四個數據行的數據表視覺效果。產品 SKU CL-02 的 [類別] 值現在標示為 [未定義]。

  4. 建立階層:如果關聯性存在於現已合併之資料表的資料行之間,請考慮建立階層。 如此一來,報表作者將能快速識別報表視覺效果切入的機會。

    在我們的範例中,報表作者現在可以使用具有兩個層級的階層:CategoryProduct

    顯示 [資料] 窗格的圖表。產品資料表包含產品階層。

如果您喜歡個別資料表協助組織欄位的方式,我們仍然建議合併成單一資料表。 您仍然可以組織欄位,只是須改為使用「顯示資料夾」

在我們的範例中,報表作者可以在 Category 顯示資料夾中找到 Marketing 欄位。

顯示 [數據] 窗格的圖表,其中 [類別] 字段位於名為 Marketing 的顯示資料夾中。

若您仍決定在模型中定義一對一的來源群組內部關聯性,在可能的情況下,請確定相關資料表中具有相符的資料列。 由於一對一的來源群組內部關聯性會評估為一般關聯性,因此資料完整性問題可能會以空白的形式出現在報表視覺效果中。 (您可以在此文章所呈現的第一個資料表視覺效果中看到空白分組的範例。)

跨來源群組的一對一關聯性

當數據表之間存在一對一 跨來源群組 關聯性時,除非您預先合併數據源中的數據,否則沒有替代模型設計。 Power BI 會將一對一模型關聯性評估為受限關聯性。 因此,請小心確保相關數據表中有相符的數據列,因為查詢結果會排除不相符的數據列。

顯示跨來源群組一對一關聯性的圖表,這是有限的關聯性。

讓我們看看將來自兩個資料表的欄位新增到資料表視覺效果,且資料表之間存在受限關聯性時,會發生什麼事。

顯示兩個表格圖像的圖表,如下一段所述。

第一個表格視覺化,使用跨來源群組關係,只顯示兩行。 缺少產品 SKU CL-02,因為 Product Category 數據表中沒有相符的數據列。 第二個數據表視覺效果會根據模型中的單一合併數據表顯示三個數據列。

如需本文的詳細資訊,請參閱下列資源: