在 Power BI Desktop 中套用多對多關聯性

使用 Power BI Desktop 中的「多對多基數關聯性」 ,您可以聯結使用「多對多」 基數的資料表。 您可以更輕鬆並更直覺的建立包含兩個或多個資料來源的資料模型。 「複合模型」 功能是 Power BI Desktop 中的大型功能,而「多對多基數關聯性」 則是其中的一部分。

A many-to-many relationship in the

Power BI Desktop 的「多對多基數關聯性」 是由三個相關功能的其中一項所組成:

  • 複合模型:「複合模型」 允許報表可有兩個以上任意組合的資料連線,包括 DirectQuery 連線或匯入。 如需詳細資訊,請參閱在 Power BI Desktop 中使用複合模型

  • 多對多基數關聯性:您可以使用複合模型在資料表之間建立「多對多基數關聯性」 。 此方法會移除資料表中唯一值的需求。 此方法也會移除先前的因應措施,像是只為建立關聯性而導入新的資料表。 本文中進一步說明此功能。

  • 儲存模式:您現在可以指定哪些視覺效果必須查詢後端資料來源。 不需要查詢的視覺效果,即便是使用 DirectQuery,也同樣會匯入。 此功能可提升效能,並減輕後端的負載。 以往,即使像是交叉分析篩選器這類的簡單視覺效果,也會起始傳送到後端來源的查詢。 如需詳細資訊,請參閱 Power BI Desktop 中的儲存模式

多對多基數關聯性解決的問題

在可使用「多對多基數關聯性」 之前,兩個資料表之間的關聯性是在 Power BI 中定義的。 關聯性中必須至少有一個資料表資料行包含唯一的值。 但是通常不會有任何資料行包含唯一的值。

例如,兩個資料表可能有標示為 Country 的資料行。 不過,任一資料表中的 Country 值都不是唯一的。 若要聯結這類資料表,您必須建立因應措施。 其中一個因應措施可能是引進具有所需唯一值的額外資料表。 使用「多對多基數關聯性」 時,如果您使用具有「多對多」 基數的關聯性,便可直接聯結這類資料表。

使用多對多基數關聯性

當您定義 Power BI 中兩個資料表之間的關聯性時,您必須定義關聯性的基數。 例如,ProductSales 和 Product 之間的關聯性(使用資料行 ProductSales [ProductCode] 和 Product [ProductCode])會定義為 多-1。 我們會以此方式定義關聯性是因為每一項產品都有多項銷售額,且 Product 資料表中資料行 (ProductCode) 是唯一的。 當您將關聯性基數定義為「多對一」 、「一對多」 或「一對一」 時,Power BI 便會進行驗證,因此您選取的基數會符合實際資料。

例如,請查看下圖的簡單模型:

ProductSales and Product table, Relationship view, Power BI Desktop

現在,想像 Product 資料表只會顯示兩個資料列,如下所示:

Product table visual with two rows, Power BI Desktop

另外,想像 Sales 資料表只有四個資料列,其中包含產品 C 的資料列。由於發生參考完整性錯誤之故,產品 C 資料列在 Product 資料表上並不存在。

Sales table visual with four rows, Power BI Desktop

ProductNamePrice (來自 Product 資料表) 以及每種產品 Qty 總計 (來自 ProductSales 資料表) 會顯示如下:

Visual displaying the product name, price, and quantity, Power BI Desktop

如同先前影像中所示,有一個空白的 ProductName 資料列與產品 C 銷售建立關聯。此空白資料列會導致下列情況:

  • ProductSales資料表中的任何資料列沒有存在於 Product 資料表中的對應資料列。 發生參考完整性問題,如同我們在此範例中所看到的產品 C。

  • ProductSales 資料表中任何資料列的外部索引鍵資料行為 Null。

基於上述原因,兩個案例中的空白資料行都會導致 ProductNamePrice 未知的銷售。

有時候,資料表是透過兩個資料行聯結,但沒有任何一個是唯一的資料行。 例如,以這兩個資料表為例:

  • Sales 資料表會依 State 顯示銷售資料,每個資料列都包含該州某個銷售類型的銷售量。 州包括加州 (CA)、華盛頓州 (WA)、德州 (TX)。

    Sales table displaying sales by state, Power BI Desktop

  • CityData 資料表會顯示城市的資料,包括人口與州 (例如加州 (CA)、華盛頓州 (WA) 及紐約州 (New York))。

    Sales table displaying city, state, and population, Power BI Desktop

State 的資料行現在已在這兩個資料表中。 您可以依照州和每州的總人口,合理地報告兩個總銷售額。 不過,有一個問題:State 資料行在任一資料表中都不是唯一的。

先前的因應措施

在 2018 年 7 月之前發行的 Power BI Desktop 版本中,您無法建立這些資料表之間的直接關聯性。 常見的因應措施如下:

  • 建立第三個資料表,其中只包含唯一的 State 識別碼。 資料表可以是下列項目的任何一項或全部:

    • 計算資料表 (使用資料分析運算式 [DAX] 定義)。
    • 以 Power Query 編輯器中定義的查詢為基礎的資料表,可能會顯示從其中一個資料表所繪製的唯一識別碼。
    • 合併的完整集。
  • 然後透過使用常見的「多對一」 關聯性,將兩個原始資料表與新的資料表建立關聯。

您可以讓因應措施資料表保持可見。 您也可以隱藏因應措施資料表,使其不會出現在 [欄位] 清單中。 若您隱藏資料表,「多對一」 關聯性常會設為雙向篩選,且您可使用來自任一資料表的 State 欄位。 後續的交叉篩選會散佈至另一個資料表。 以下影像會顯示該方法:

Hidden State table, Relationship view, Power BI Desktop

接著,顯示 State (來自 CityData 資料表) 以及 Population 總計與 Sales 總計的視覺效果會出現如下:

Screenshot shows a table with State, Population, and Sales data.

注意

因為此因應措施中使用來自 CityData 資料表的州,所以只會列出該資料表中的州,因此會排除德州 (TX)。 此外,和「多對一」 關聯性不同,雖然總計資料列包含所有 Sales (包括德州 (TX) 的銷售額),但詳細資料不包括涵蓋這類不相符資料列的空白資料列。 同樣地,也沒有空白資料列涵蓋 State 值為 Null 的任何 Sales

假設您也將 City 新增至該視覺效果。 雖然已知每個 City 的人口,但針對 City 顯示的 Sales 卻只會重複對應 StateSales。 當資料行群組與某個彙總量值無關時,通常會發生這種情況,如下所示:

State and city population and sales, Power BI Desktop

假設您在這裡將新 Sales 資料表定義為所有 State 的組合,並使其顯示在 [欄位] 清單中。 相同的視覺效果會顯示 State (在新的資料表上)、總 Population,以及總 Sales

State, population, and sales visual, Power BI Desktop

如您所見,德克薩斯州的 銷售 資料,但有未知的 人口 資料(以及紐約),包含已知的 人口 資料但不含任何 銷售 資料。 此因應措施並非最佳方法,且有許多問題。 若為多對多基數關聯性,可以解決所產生的問題,如下一節中所述。

使用多對多基數關聯性取代因應措施

您可以直接關聯資料表(例如我們先前所述的資料表),而不需要採取類似的因應措施。 現在可以將關聯性基數設為「多對多」 。 此設定指出沒有任何資料表包含唯一值。 針對這類關聯性,您仍然可以控制哪個資料表會篩選另一個資料表。 或者,您也可以套用雙向篩選,其中每個資料表都會篩選另一個資料表。

在 Power BI Desktop 中,當確定資料表都未在關聯性資料行中包含唯一值時,基數會預設為「多對多」 。 在這種情況下,會出現警告訊息,確認您想要設定關聯性,且變更不是資料問題的非預期效果。

例如,當您直接在 CityData 和 sales 之間建立關聯性時(篩選應從 CityData 流向 sales),Power BI Desktop 顯示 [編輯關聯性] 對話方塊:

Edit relationship dialog box, Power BI Desktop

產生的 [關聯性] 檢視會顯示兩個資料表之間的直接多對多關聯性。 [欄位] 清單中資料表外觀及其在建立視覺效果之後的後續行為,都會與我們套用因應措施時相似。 在因應措施中,顯示相異 State 資料的額外資料表並未設為可見。 如先前所述,會顯示出現 StatePopulationSales 資料的視覺效果:

State, Population, and Sales tables, Power BI Desktop

「多對多基數關聯性」 和更典型的「多對一」 關聯性,兩者的主要差異如下:

  • 顯示的值不包含導致另一個資料表中不相符資料列的空白資料列。 此外,當在另一個資料表關聯性中使用的資料行為 Null 時,也不會代表資料列的值。

  • 您無法使用 RELATED() 函式,因為可和一個以上的資料列建立關聯。

  • 在其中一個資料表上使用 ALL() 函式不會移除套用到另一個以多對多關聯性相關資料表的篩選條件。 在先前範例中,如下所示所定義量值不會移除對相關 CityData 資料表中資料行的篩選條件:

    Script example

    顯示 StateSalesSales total 資料的視覺效果會產生此圖表:

    Table visual

在考慮上述差異的情況下,請確定使用的計算(例如總計的 ALL(<Table>)ALL(<Table>))傳回預期的結果。

考量與限制

這一版的「多對多基數關聯性」 和複合模型有一些限制。

下列 Live Connect (多維度) 來源不能與複合模型搭配使用:

  • SAP HANA
  • SAP Business Warehouse
  • SQL Server Analysis Services
  • Power BI 資料集
  • Azure Analysis Services

當您使用 DirectQuery 連線到這些多維度來源時,即無法連線到其他 DirectQuery 來源,也無法與匯入的資料合併。

使用「多對多基數關聯性」 時,使用 DirectQuery 的現有限制仍然適用。 許多限制現在會依每個資料表而不同,視資料表的儲存模式而定。 例如,已匯入資料表上的計算結果欄可以參考其它資料表,但 DirectQuery 資料表上的計算結果欄仍僅能參考相同資料表上的資料行。 如果模型內有任何資料表為 DirectQuery,則其他限制會套用至整個模型。 例如, & 如果模型中有任何資料表具有 DirectQuery 的儲存模式,則不提供 quickinsights 和 Q a 功能無法在模型上使用。

後續步驟

如需複合模型及 DirectQuery 的詳細資訊,請參閱下列文章: