雙向關聯性指引
本文以您作為使用 Power BI Desktop 的數據模型工具為目標。 它提供您何時建立雙向模型關聯性的指引。 雙向關聯性是雙向篩選 的關聯性。
注意
本文未涵蓋模型關聯性的簡介。 如果您不熟悉關聯性、其屬性或設定方式,建議您先閱讀 Power BI Desktop 中的模型關聯性一文。
您也必須瞭解星型架構設計。 如需詳細資訊,請參閱了解星型結構描述及其對 Power BI 的重要性。
一般而言,我們建議將雙向關聯性的使用程度降到最低。 它們可能會對模型查詢效能產生負面影響,並可能為您的報表使用者提供令人困惑的體驗。
雙向篩選可以解決特定需求時,有三種案例:
特殊模型關聯性
建立下列兩種特殊模型關聯性類型時,雙向關聯性扮演著重要的角色:
- 一對一:所有一對一關聯性都必須是雙向的,否則無法進行設定。 一般而言,我們不建議建立這些類型的關聯性。 如需完整的討論和替代設計,請參閱 一對一關係指引。
- 多對多:在關聯兩個維度類型數據表時,需要橋接數據表。 需要雙向篩選條件,以確保篩選會傳播到橋接數據表。 如需詳細資訊,請參閱多對多關聯性指引(關聯多對多維度)。
交叉分析篩選器專案「含數據」
雙向關聯性可以提供交叉分析篩選器,將專案限制在數據所在的位置。 (如果您熟悉 Excel 數據透視表和交叉分析篩選器,則從 Power BI 語意模型(先前稱為數據集)或 Analysis Services 模型採購數據時,這是預設行為。 為了協助說明其意義,請先考慮下列模型圖表。
第一個數據表名為 Customer,其中包含三個數據行: Country-Region、 Customer 和 CustomerCode。 第二個數據表名為 Product,其中包含三個數據行: Color、 Product 和 SKU。 第三個數據表名為 Sales,其中包含四個數據行: CustomerCode、 OrderDate、 Quantity 和 SKU。 Customer 和 Product 數據表是維度類型數據表,而且每個數據表都有與 Sales 數據表的一對多關聯性。 每個關聯性都會以單一方向篩選。
為了協助描述雙向篩選的運作方式,已修改模型圖表以顯示數據表數據列。 本文中的所有範例都是以此數據為基礎。
注意
您無法在 Power BI Desktop 模型圖表中顯示資料表資料列。 本文中已完成,可支援具有清楚範例的討論。
三個資料表的數據列詳細資料會在下列點符清單中描述:
- Customer 數據表有兩個數據列:
- CustomerCode CUST-01、Customer Customer-1、Country-Region 美國
- CustomerCode CUST-02、 Customer Customer-2、 Country-Region Australia
- Product 數據表有三個數據列:
- SKU CL-01, 產品 T 恤, 色彩 綠色
- SKU CL-02, 產品 牛仔褲, 色彩 藍色
- SKU AC-01、 Product Hat、 Color Blue
- Sales 數據表有三個數據列:
- OrderDate January 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10
- OrderDate 2019 年 2 月 2 日,CustomerCode CUST-01,SKU CL-02,數量 20
- OrderDate March 2019, CustomerCode CUST-02, SKU CL-01, Quantity 30
現在請考慮下列報表頁面。
頁面包含兩個交叉分析篩選器和卡片視覺效果。 第一個交叉分析篩選器適用於國家/地區,它有兩個專案:澳大利亞和 美國。 它目前由澳大利亞分量。 第二個交叉分析篩選器適用於 Product,它有三個專案:Hat、Jeans 和 T 恤。 未選取任何專案(表示 未篩選任何產品 )。 卡片視覺效果會顯示30個數量。
當報表使用者依澳大利亞配量時,您可能想要限制 [產品 交叉分析篩選器] 來顯示數據 與澳大利亞銷售相關的 專案。 其意義是顯示交叉分析篩選器專案「含數據」。 您可以藉由設定 Product 和 Sales 數據表之間的關聯性,以雙向篩選來達成此行為。
產品交叉分析篩選器現在會列出單一專案:T 恤。 此專案代表唯一銷售給澳大利亞客戶的產品。
首先建議您仔細考慮此設計是否適用於報表使用者。 某些報表用戶發現體驗令人困惑。 他們不明白交叉分析篩選器專案與其他交叉分析篩選器互動時,為何動態顯示或消失。
如果您決定「使用數據」顯示交叉分析篩選器專案,則不建議您設定雙向關聯性。 雙向關聯性需要更多的處理,因此它們可能會對查詢效能產生負面影響,特別是隨著模型中雙向關聯性的數目增加。
有更好的方法可以達到相同的結果:您不必使用雙向篩選,而是將視覺層級篩選套用至 Product 交叉分析篩選器本身。
現在讓我們考慮 Product 和 Sales 數據表之間的關聯性不再雙向篩選。 而且,下列量值定義已新增至 Sales 數據表。
Total Quantity = SUM(Sales[Quantity])
若要顯示 「含數據」的產品 交叉分析篩選器專案,它只需要使用「不是空白」條件來 篩選 Total Quantity 量值。
維度對維度分析
涉及雙向關聯性的不同案例會將事實類型數據表視為橋接數據表。 如此一來,它支援在不同的維度類型數據表篩選內容中分析維度類型數據表數據。
使用本文中的範例模型,請考慮如何回答下列問題:
- 有多少顏色賣給澳大利亞客戶?
- 有多少國家/地區購買了牛仔褲?
這兩個問題都可以回答 ,而不需要 在橋接事實類型數據表中摘要數據。 不過,它們會要求篩選從一個維度類型數據表傳播到另一個維度類型數據表。 篩選一旦透過事實類型數據表傳播,就可以使用 DISTINCTCOUNT DAX 函式來達成維度類型數據表數據行的摘要,也可能 是 MIN 和 MAX DAX 函式。
當事實類型數據表的行為與橋接數據表類似時,您可以遵循多對多關聯性指引來關聯兩個維度類型數據表。 它至少需要設定一個關聯性,以雙向篩選。 如需詳細資訊,請參閱多對多關聯性指引(關聯多對多維度)。
不過,如本文所述,此設計可能會對效能產生負面影響,以及與交叉分析篩選器專案「含數據」相關的用戶體驗後果。 因此,建議您改用 CROSSFILTER DAX 函式,在量值定義中啟用雙向篩選。 CROSSFILTER 函式可用來修改表達式評估期間的篩選方向,或甚至停用關聯性。
請考慮將下列量值定義新增至 Sales 資料表。 在這裡範例中,Customer 和 Sales 資料表之間的模型關聯性已設定為以單一方向篩選。
Different Countries Sold =
CALCULATE(
DISTINCTCOUNT(Customer[Country-Region]),
CROSSFILTER(
Customer[CustomerCode],
Sales[CustomerCode],
BOTH
)
)
在評估不同國家/地區銷售量值表達式期間,Customer 與 Sales 數據表之間的關聯性會雙向篩選。
下表顯示每個已售出產品的統計數據。 Quantity 數據行只是數量值的總和。 [ 不同國家/地區銷售 ] 數據行代表所有已購買產品之客戶的國家/地區值相異計數。
相關內容
如需本文的詳細資訊,請參閱下列資源:
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應