處理關係和基數
與其他資料庫管理系統不同, Power BI 具有關係 方向性 的概念。 這種方向性在過濾多個表之間的資料時起著重要作用。 當您載入資料時, Power BI 會透過符合列名稱自動尋找資料中存在的關係。 您也可以使用 管理關係 手動編輯這些選項。
例如,您已從 Sales 資料庫中檢索了許多資料表,下圖是語意模型的範例。 Power BI 已自動偵測到多種關係,但您無法辨別它們的意義。 您希望確保這些關係準確反映數據中存在的關係。
人際關係
以下是您會發現的不同類型的關係 Power BI。
多對一 (*:1)
或一對多 (1: *)
關係
描述一種關係,其中一列中某個值的多個實例僅與另一列中的一個唯一對應實例相關。
描述事實表和維度表之間的方向性。
是最常見的方向性類型,並且是自動建立關係時 Power BI 的預設值。
CountryName 和 Territory 表之間就是一對多關係的範例,其中您可以擁有與一個唯一國家/地區關聯的多個地區。
一對一 (1:1) 關係:
描述一種關係,其中兩個表之間只有一個值的實例是公共的。
需要兩個表中的值唯一。
不建議這樣做,因為這種關係儲存了冗餘資訊並表明模型設計不正確。 最好的做法是合併表格。
一對一關係的一個例子是,如果您在兩個不同的表中擁有產品和產品 ID。 建立一對一關係是多餘的,應該合併這兩個表。
多對多 (.) 關係:
描述兩個表之間有許多共同值的關係。
關係中的任一表中不需要唯一值。
不推薦;缺乏唯一值會導致歧義,您的使用者可能不知道哪一列值指的是什麼。
例如,下圖顯示了 OrderDate 列上的 Sales 和 Order 表之間的多對多關係,因為多個銷售可以有多個與其關聯的訂單。 由於兩個表可以具有相同的訂單日期,因此引入了歧義。
交叉濾鏡方向
可以在關係的一側或兩側過濾資料。
使用 單一交叉過濾器方向:
關係中只能使用一張表來篩選資料。 例如,表1可以透過表2過濾,但表2不能透過表1過濾。
提示
跟隨 表之間關係上的箭頭方向,以了解過濾器將流向哪個方向。 您通常希望這些箭頭指向指向 到您的事實表。
對於一對多或多對一關係,交叉過濾器方向將從「一」側開始,這表示過濾將發生在具有多個值的表中。
使用 兩個交叉過濾器方向 或 雙向交叉過濾:
關係中的一個表可用來過濾另一個表。 例如,可以透過事實表來篩選維度表,透過維度表來篩選事實表。
使用具有多對多關係的雙向交叉過濾時,效能可能會較低。
關於雙向交叉過濾的警告:除非您完全了解這樣做的後果,否則不應啟用雙向交叉過濾關係。 啟用它可能會導致歧義、過度採樣、意外結果和潛在的效能下降。
基數和跨過濾器方向
對於一對一關係,唯一可用的選項是雙向交叉過濾。 可以在此關係的任一側過濾數據,並產生一個獨特的、明確的值。 例如,您可以篩選一個產品 ID 並傳回單一產品,您也可以篩選一個產品並傳回單一產品 ID。
對於多對多關係,您可以選擇使用雙向交叉過濾在單一方向或雙向進行過濾。 與雙向交叉過濾相關的歧義在多對多關係中被放大,因為不同表之間將存在多個路徑。 如果您建立度量、計算或篩選器,則在篩選資料的情況下可能會出現意想不到的後果,並且具體取決於篩選器中的關係 Power BI 引擎在應用過濾器時選擇不同,最終結果可能會有所不同。 這種情況對於雙向關係也是如此,因此在使用它們時應該謹慎。
因此,多對多關係和/或雙向關係很複雜。 除非您確定聚合後的資料是什麼樣子,否則這些具有多個過濾方向的開放式關係類型可能會在資料中引入多個路徑。
創建多對多關係
考慮這樣的場景:您的任務是建立一個視覺物件來檢查客戶和帳戶的預算。 您可以在同一帳戶上擁有多個客戶,也可以在同一客戶上擁有多個帳戶,因此您知道需要建立多對多關係。
若要建立此關係,請轉至 管理關係>新的。 在出現的視窗中,創建 客戶ID CustomerTable 和 AccountTable 中的欄位。 關係設定為多對多,過濾類型為雙向。 您將立即收到警告,只有在預計兩列都不會具有唯一值的情況下才應使用這種類型的關係,因為您可能會得到意外的值。 因為要在兩個方向上過濾,所以選擇 雙向交叉過濾。
選擇 確定。 您現在已經成功創建了多對多關係。
有關詳細信息,請參閱 中的多對多關係 Power BI。