在 Power BI Desktop 中建立及管理關聯性 (機器翻譯)

當您有多個數據表時,您很有可能會使用來自所有這些數據表的數據進行一些分析。 這些資料表之間的關聯性,對於精確地計算結果並在報表中顯示正確資訊來說是必要的。 在大部分情況下,您不需要執行任何動作。 自動偵測功能會為您執行此程式。 不過,有時候您可能必須自行建立關聯性,或需要變更關聯性。 無論哪種方式,請務必瞭解 Power BI Desktop 中的關聯性,以及如何建立和編輯關聯性。

載入期間自動偵測

如果您同時查詢兩個或多個數據表,載入數據時,Power BI Desktop 會嘗試尋找併為您建立關聯性。 關聯性選項 基數交叉篩選方向[讓此關聯性成為使用 中] 會自動設定。 Power BI Desktop 會查看您要查詢之數據表中的數據行名稱,以判斷是否有任何潛在的關聯性。 如果有的話,系統會自動建立這些關聯性。 如果 Power BI Desktop 無法以高度信賴度判斷是否有相符專案,則不會建立關聯性。 不過,您仍然可以使用 [ 管理關聯性 ] 對話框手動建立或編輯關聯性。

使用自動偵測建立關聯性

在 [模型] 索引標籤上,選取 [管理關聯>性自動偵測]。

Animation showing how to create a relationship with autodetect.

手動建立關聯性

  1. 在 [模型] 索引標籤上,選取 [管理關聯性>][新增]。

  2. 在 [ 建立關聯性] 對話框的第一個數據表下拉式清單中,選取數據表。 選取您要在關聯性中使用的數據行。

  3. 在第二個數據表下拉式清單中,選取您要在關聯性中的其他數據表。 選取您想要使用的其他數據行,然後選取 [ 確定]。

    Animation showing how to create a manual relationship.

根據預設,Power BI Desktop 會自動設定基數(方向)、交叉篩選方向讓此關聯性成為新關聯性的使用中。 不過,您可以視需要變更這些設定。 如需詳細資訊,請參閱 瞭解其他選項

如果針對關聯性選取的數據表都沒有唯一值,您會看到下列錯誤: 其中一個數據行必須具有唯一值。 關聯性中 至少有一個數據表必須 有相異且唯一的索引鍵值清單,這是所有關係資料庫技術的常見需求。

如果您遇到該錯誤,有幾種方法可以修正此問題:

  • 使用 [移除重複專案 ] 建立具有唯一值的數據行。 這種方法的缺點是,移除重複的數據列時,您可能會遺失資訊。 索引鍵(數據列)通常是基於充分理由重複的。
  • 將由相異索引鍵值清單組成的中繼數據表新增至模型,然後連結至關聯性中的兩個原始數據行。

如需詳細資訊,請參閱這篇部落格文章

或者,在模型檢視表版面配置中,您可以將數據行從某個數據表拖放到另一個數據表中的數據行,以建立關聯性。

編輯關聯性

在 Power BI 中編輯關聯性的方法有兩種。

編輯關聯性的第一種方法是在 [模型] 檢視的 [屬性] 窗格中使用 [編輯關聯性],您可以在其中選取兩個數據表之間的任何一行,以查看 [屬性] 窗格中的關聯性選項。 請務必展開 [ 屬性 ] 窗格,以查看關聯性選項。

Screenshot of adjusting relationships in the properties pane.

您也可以在 [屬性] 窗格中看到編輯關聯性的影片示範

編輯關聯性的另一種方法是使用 [ 關聯性編輯器] 對話框,您可以從 Power BI Desktop 中開啟許多方式。 下列清單顯示您可以開啟 [關聯性編輯器] 對話框的不同方式:

[報表] 檢視 中,執行下列任一動作:

  • 選取 [模型化] 功能區> [管理關聯性],然後選取關聯性,然後選取 [編輯]。
  • 在 [ 欄位 ] 清單中選取資料表,然後選取 [資料表工具 ] 功能區 >[管理關聯性],然後選取關聯性,然後選取 [ 編輯]。

從 [數據] 檢視中,選取 [數據表工具 ] 功能區 >[管理關聯性],然後選取關聯性,然後選擇 [ 編輯]。

從 [ 模型] 檢視執行下列任何動作:

  • 選取 [ 首頁 ] 功能區 >[管理關聯性],然後選擇關聯性,然後選取 [ 編輯]。
  • 按兩個數據表之間的任何一行。
  • 以滑鼠右鍵按兩個數據表之間的任何一行,然後選擇 [ 屬性]。
  • 選取兩個數據表之間的任何一行,然後選擇 [屬性] 窗格中的 [開啟關聯性編輯器]。

最後,您也可以從任何檢視編輯關聯性,以滑鼠右鍵按兩下或選取省略號以取得任何數據表的操作功能表,然後選取 [管理關聯性],選取關聯性,然後選取 [ 編輯]

下圖顯示 [編輯關聯性] 視窗的螢幕快照。

Screenshot of the edit relationship window.

使用不同的方法來編輯關聯性

使用 [ 編輯關聯性] 對話框 是編輯 Power BI 中關聯性的較引導式體驗,目前處於預覽狀態。 您可以在每個資料表中看到資料的預覽。 當您選取不同的資料行時,視窗會自動驗證關聯性,並提供適當的基數和交叉篩選選取專案。

在 [ 屬性 ] 窗格中編輯關聯性是編輯 Power BI 中關聯性的簡化方法。 您只會看到您可以選擇的數據表名稱和數據行、未顯示數據預覽,而您所做的關聯性選擇只會在您選取 [套用變更] 時進行驗證。 使用 [ 屬性 ] 窗格及其簡化的方法可減少編輯關聯性時所產生的查詢數目,這對於巨量數據案例而言可能很重要,尤其是在使用 DirectQuery 連線時。 使用 [屬性] 窗格建立的關聯性也可以比 [編輯關聯性] 對話框中允許建立的關聯性更進階。

您也可以按 Ctrl 鍵並選取多個線條來選擇多個關聯性,以在 [模型] 檢視表版面配置中多重選取關聯性。 您可以在 [ 屬性 ] 窗格中編輯通用屬性,而 [套用變更 ] 將會處理一個交易中的變更。

您也可以在鍵盤上按 [刪除 ] 來刪除單一或多重選取的關聯性。 您無法復原刪除動作,因此對話框會提示您確認刪除關聯性。

重要

編輯屬性窗格功能中的關聯性目前為預覽狀態。 在預覽狀態時,功能和文件可能會變更。 您必須在 Power BI Desktop 中啟用此功能,方法是移至 [檔案>選項和設定>選項>預覽功能],然後在 [全域] 區段中,選取 [關聯性] 窗格旁的複選框。

設定其他選項

當您建立或編輯關聯性時,您可以設定更多選項。 根據預設,Power BI Desktop 會根據最佳猜測自動設定更多選項,根據數據行中的數據,每個關聯性可能會有所不同。

基數

選項可以有下列其中一個設定:

多對一 (*:1):多對一關聯性是最常見的默認關聯性類型。 這表示指定數據表中的數據行可以有一個以上的值實例,而其他相關數據表通常稱為查閱數據表,只有一個值的實例。

一對一(1:1):在一對一關聯性中,一個數據表中的數據行只有一個特定值的實例,而另一個相關數據表只有一個特定值的實例。

一對多 (1:*):在一對多關聯性中,一個數據表中的數據行只有一個特定值的實例,而另一個相關數據表可以有一個以上的值實例。

多對多 (*:*):使用複合模型時,您可以建立數據表之間的多對多關聯性,以移除數據表中唯一值的需求。 其也會消除先前的因應措施,例如只引進新的資料表來建立關聯性。 如需詳細資訊,請參閱 多對多基數的關聯性

如需何時變更基數的詳細資訊,請參閱 瞭解其他選項

交叉篩選方向

[ 交叉篩選方向 ] 選項可以有下列其中一個設定:

兩者:為了篩選目的,這兩個數據表都會被視為單一數據表。 這 個設定適用於包含許多查閱表格的單一數據表,而該數據表周圍有許多查閱表格。 例如銷售實際值數據表,其部門有查閱表格。 此設定通常稱為星型架構組態(具有數個查閱表格的中央數據表)。 不過,如果您有兩個以上的數據表,也會有查閱表格(有一些共通),則您不想使用 [兩者] 設定。 若要繼續上述範例,在此情況下,您也有一個預算銷售數據表,可記錄每個部門的目標預算。 而且,部門數據表會同時連線到銷售與預算數據表。 請避免這種設定的 [兩者] 設定。

單一:最常見的預設方向,這表示已連接數據表中的篩選選項適用於匯總值的數據表。 如果您在 Excel 2013 或更早的數據模型中匯入 Power Pivot,則所有關聯性都會有單一方向。

如需何時變更交叉篩選方向的詳細資訊,請參閱 瞭解其他選項

設為使用中的關聯性

核取時,關聯性會做為使用中的默認關聯性。 在兩個數據表之間有多個關聯性的情況下,作用中關聯性提供一種方式,讓 Power BI Desktop 自動建立包含這兩個數據表的視覺效果。

如需何時啟用特定關聯性的詳細資訊,請參閱 瞭解其他選項

了解關聯性

一旦將兩個數據表與關聯性連接在一起,您就可以使用這兩個數據表中的數據,就像是單一數據表一樣。 然後,您不必擔心關聯性詳細數據,或將這些數據表扁平化為單一數據表,再匯入數據表。 在許多情況下,Power BI Desktop 可以自動為您建立關聯性。 不過,如果 Power BI Desktop 無法確定兩個數據表之間的關聯性應該存在,則不會自動建立關聯性。 在此情況下,您必須這麼做。

讓我們進行快速教學課程,以更清楚地說明關聯性如何在Power BI Desktop中運作。

提示

您可以自行完成此課程:

  1. 將下列 ProjectHours 數據表複製到 Excel 工作表(不包括標題)、選取所有單元格,然後選取 [插入>數據表]。
  2. 在 [ 建立數據表] 對話框中,選取 [ 確定]。
  3. 選取任何數據表數據格,選取 [數據表設計>數據表名稱],然後輸入 ProjectHours。
  4. CompanyProject 數據表執行相同的動作。
  5. 使用 Power BI Desktop 中的取得數據匯入數據 。 選取兩個數據表作為數據源,然後選取 [ 載入]。

第一個數據表 ProjectHours 是工作票證的記錄,記錄人員在特定專案上工作的時數。

ProjectHours

SubmittedBy 小時 計畫 DateSubmit
1001 Brewer,Alan 22 藍色 1/1/2013
1002 Brewer,Alan 26 2/1/2013
1003 Ito,Shu 34 黃色 12/4/2012
1004 Brewer,Alan 13 柳橙 1/2/2012
1005 Bowen, Eli 29 紫色 10/1/2013
1006 Bento,Nuno 35 2/1/2013
1007 Hamilton,David 10 黃色 10/1/2013
1008 Han,Mu 28 柳橙 1/2/2012
1009 Ito,Shu 22 紫色 2/1/2013
1010 Bowen, Eli 28 10/1/2013
1011 Bowen, Eli 9 藍色 10/15/2013

第二個數據表 CompanyProject 是具有指派優先順序的項目清單:A、B 或 C。

CompanyProject

ProjName 優先順序
藍色 A
B
C
黃色 C
紫色 B
柳橙 C

請注意,每個數據表都有項目數據行。 每個名稱稍有不同,但值看起來就像相同。 這種差異很重要,我們很快就會回到它。

既然我們已將兩個數據表匯入模型,讓我們建立報表。 我們想要取得的第一件事是專案優先順序提交的時數,因此我們從 [字段] 窗格中選取 [優先順序] 和 [時數]。

Screenshot of the Priority and Hours fields selected from the Fields pane.

如果我們查看報表畫布中的數據表,您會看到每個專案的時數是 256,這也是總計。 顯然,這個數位不正確。 為什麼? 這是因為我們無法計算一個數據表(Project 數據表中的時數)的總和,而無法根據另一個數據表中的值(CompanyProject 數據表中的優先順序)中的值進行配量,而不會在這兩個數據表之間產生關聯性。

因此,讓我們建立這兩個數據表之間的關聯性。

還記得我們在兩個數據表中看到的數據行具有專案名稱,但值看起來很相似? 我們將使用這兩個數據行來建立數據表之間的關聯性。

為什麼這些數據行? 嗯,如果我們查看 ProjectHours 數據表中的 Project 數據行,我們會看到藍色、紅色、黃色、橙色等值。 事實上,我們看到數個具有相同值的數據列。 實際上,Project 有許多色彩值

如果我們查看 CompanyProject 資料表中的 ProjName 數據行,我們只會看到項目名稱的每個色彩值之一。 此數據表中的每個色彩值都是唯一的,這很重要,因為我們可以在這兩個數據表之間建立關聯性。 在此情況下,多對一關聯性。 在多對一關聯性中,其中一個數據表中至少有一個數據行必須包含唯一值。 有些關聯性還有一些其他選項,稍後我們將探討。 現在,讓我們建立兩個數據表中每個項目數據行之間的關聯性。

若要建立新的關聯性

  1. 從 [模型] 索引標籤選取 [管理關聯]。

  2. 在 [管理關聯性] 中,選取 [新增] 以開啟 [建立關聯性] 對話框,我們可以在其中選取數據表、數據行,以及我們想要用於關聯性的任何其他設定。

  3. 在第一個下拉式清單中,選取 [ProjectHours ] 作為第一個數據表,然後選取 [專案 ] 資料行。 這一方是我們 關係的許多 方面。

  4. 在第二個下拉式清單中, CompanyProject 會預先選取為第二個數據表。 選取 ProjName 數據行。 這一邊是我們 關係中的一 面。

  5. 接受關聯性選項的預設值,然後選取 [ 確定]。

    Screenshot of the Create relationship dialog box.

  6. 在 [ 管理關聯性] 對話框中,選取 [ 關閉]。

為了充分披露,您只是以艱難的方式建立了這種關係。 您可能已在 [管理關聯性] 對話框中選取 [自動偵測]。 事實上,當您載入數據行具有相同名稱時,自動偵測會自動為您建立關聯性。

現在,讓我們再次查看報表畫布中的數據表。

Screenshot of the Priority and Hours fields selected from the Fields pane with new relationship.

這看起來好多了,不是嗎?

當我們依優先順序加總時數時,Power BI Desktop 會尋找 CompanyProject 查閱表格中唯一色彩值的每個實例、尋找 ProjectHours 數據表中每個值的每個實例,然後計算每個唯一值的總和總計。

使用自動偵測,您甚至可能不需要執行太多動作。

瞭解其他選項

建立關聯性時,使用自動偵測或手動建立的關聯性時,Power BI Desktop 會根據數據表中的數據自動設定其他選項。 這些額外的關聯性選項位於 [建立關聯性] 和 [編輯關聯性] 對話框的下半部。

Screenshot of the lower portion of the Create relationship dialog box showing Cardinality and Cross filter direction options.

Power BI 通常會自動設定這些選項,您不需要調整這些選項。 但在某些情況下,您可能會想要自行設定這些選項。

自動關聯性更新

您可以管理 Power BI 如何處理和自動調整報表和模型中的關聯性。 若要指定 Power BI 處理關聯性選項的方式,請從 Power BI Desktop 選取 [檔案>選項和設定>選項],然後選取左窗格中的 [數據載入]。 [關聯性] 的選項隨即出現。

Screenshot of the Options box showing the Relationships settings in the Data Load tab.

有三個選項可以選取並啟用:

  • 第一次載入時從數據源匯入關聯性:預設會選取此選項。 選取時,Power BI 會檢查數據源中定義的關聯性,例如數據倉儲中的外鍵/主鍵關聯性。 如果存在這類關聯性,當您一開始載入數據時,這些關聯性會鏡像到 Power BI 數據模型。 此選項可讓您快速開始使用模型,而不是要求您自行尋找或定義這些關聯性。

  • 重新整理資料時更新或刪除關聯性:此選項預設為未選取。 如果您選取它,Power BI 會在重新整理語意模型時檢查數據源關聯性的變更。 如果變更或移除了這些關聯性,Power BI 會鏡像其本身數據模型中的這些變更,並更新或刪除它們以符合。

    警告

    如果您使用依賴已定義關聯性的數據列層級安全性,不建議選取此選項。 如果您移除 RLS 設定所依賴的關聯性,您的模型可能會變得較不安全。

  • 載入數據之後自動偵測新的關聯性:此選項會在載入期間自動偵測中所述

數據的未來更新需要不同的基數

一般而言,Power BI Desktop 可以自動判斷關聯性的最佳基數。 如果您確實需要覆寫自動設定,因為您知道數據未來會變更,您可以使用基數控件加以變更。 讓我們看看需要選取不同基數的範例。

CompanyProjectPriority 數據表是所有公司專案及其優先順序的清單。 ProjectBudget 數據表是一組已核准預算的專案。

CompanyProjectPriority

ProjName 優先順序
藍色 A
B
C
黃色 C
紫色 B
柳橙 C

ProjectBudget

已核准的專案 BudgetAllocation AllocationDate
藍色 40,000 12/1/2012
100,000 12/1/2012
50,000 12/1/2012

如果我們在 ProjectBudget 數據表中的 [已核准的專案] 數據行與 CompanyProjectPriority 數據表中的 ProjectName 數據行之間建立關聯性,Power BI 會自動將基數設定為一對一(1:1),並將交叉篩選方向設定[兩者]。

Screenshot of the Create relationship dialog box with Cardinality to One to one (1:1) and Cross filter direction to Both.

Power BI 進行這些設定的原因是,在 Power BI Desktop 中,這兩個數據表的最佳組合如下:

ProjName 優先順序 BudgetAllocation AllocationDate
藍色 A 40,000 12/1/2012
B 100,000 12/1/2012
C 50,000 12/1/2012
黃色 C

紫色 B

柳橙 C

兩個數據表之間有一對一關聯性,因為合併數據表的 ProjName 數據行中沒有重複的值。 ProjName 數據行是唯一的,因為每個值只會發生一次;因此,兩個數據表中的數據列可以直接合併,而不會有任何重複。

但是,假設您知道數據會在下次重新整理數據時變更。 ProjectBudget 數據表的重新整理版本現在有藍色和紅色專案的其他數據列:

ProjectBudget

已核准的專案 BudgetAllocation AllocationDate
藍色 40,000 12/1/2012
100,000 12/1/2012
50,000 12/1/2012
藍色 80,000 2013/6/1
90,000 2013/6/1

這些額外的數據列表示這兩個數據表的最佳組合現在看起來像這樣:

ProjName 優先順序 BudgetAllocation AllocationDate
藍色 A 40,000 12/1/2012
B 100,000 12/1/2012
C 50,000 12/1/2012
黃色 C

紫色 B

柳橙 C

藍色 A 80000 2013/6/1
B 90000 2013/6/1

在這個新的合併數據表中 ,ProjName 數據行具有重複的值。 一旦重新整理數據表,這兩個原始數據表就不會有一對一關聯性。 在此情況下,由於我們知道這些未來的更新會導致 ProjName 數據行有重複專案,因此我們想要將基數設定為多對一 (*:1),而 ProjectBudget 上的端和 CompanyProjectPriority 上的端。

調整複雜數據表和關聯性的交叉篩選方向

對於大部分關聯性,交叉篩選方向會設定為 [兩者]。 不過,在某些情況下,您可能需要設定此選項與預設值不同。 其中一個範例是,如果您要從舊版 Power Pivot 匯入模型,其中每個關聯性都會設定為單一方向。

個設定可讓Power BI Desktop將連線數據表的所有層面視為單一數據表。 不過,在某些情況下,Power BI Desktop 無法將關聯性的交叉篩選方向設定為 [兩者 ],也會保留一組明確的預設值以供報告之用。 如果關聯性交叉篩選方向未設定為 [兩者],則通常是因為它會建立模棱兩可。 如果預設交叉篩選設定無法為您運作,請嘗試將它設定為特定數據表或 [兩者]。

單向交叉篩選適用於許多情況。 事實上,如果您已從 Excel 2013 或更早版本中的 Power Pivot 匯入模型,所有關聯性都會設定為單一方向。 單一方向表示,已連線數據表中的篩選選擇適用於匯總工作的數據表。 有時候,瞭解交叉篩選可能會有點困難,因此讓我們看看一個範例。

透過單向交叉篩選,如果您建立摘要專案時數的報表,則可以選擇依 CompanyProject 資料表及其 優先順序 數據行或 CompanyEmployee 數據表及其 City 數據行來摘要(或篩選)。 不過,如果您想要計算每個項目的員工數目(較不常見的問題),則無法運作。 您會收到一個值數據行,這些值全都相同。 在下列範例中,兩個關聯性的交叉篩選方向會設定為單一方向:指向 ProjectHours 數據表。 在 [ ] 中, [專案 ] 字段會設定為 [ 計數]:

Screenshot of the visualization tab used with the Employee and Project fields.

篩選規格會從 CompanyProject 流向 ProjectHours (如下圖所示),但不會流向 CompanyEmployee

Diagram of a cross filtering example with flow from CompanyProject to ProjectHours.

不過,如果您將交叉篩選方向設定為 [兩者],則會正常運作。 [ 兩者] 設定可讓篩選規格流向 CompanyEmployee

Diagram of a cross filtering example with flow both ways

將交叉篩選方向設定為 [兩者],現在我們的報表看起來正確:

Screenshot of cross filtering direction set to Both.

交叉篩選雙向適用於數據表關聯性的模式,例如先前顯示的模式。 此架構最常稱為星型架構,如下所示:

Diagram of cross filtering both directions in star schema.

交叉篩選方向不適用於通常位於資料庫中的較一般模式,如下圖所示:

Diagram of cross filtering in both directions on a database pattern.

如果您有類似這樣的數據表模式,使用迴圈,則交叉篩選可以建立模棱兩可的關聯性集合。 例如,如果您從 TableX 加總欄位,然後選擇依 TableY 上的欄位進行篩選,則不清楚篩選應該如何透過頂端資料表或底部資料表移動。 這種模式的常見範例是使用 TableX 做為銷售數據表,其中包含實際數據和 TableY 作為預算數據。 然後,中間的數據表是兩個數據表所使用的查找表,例如除法或區域。

如同使用中/非使用中關聯性,如果 Power BI Desktop 會在報表中建立模棱兩可時,不允許將關聯性設定 為 [兩者 ]。 有數種不同的方式可以處理這種情況。 以下是兩個最常見的:

  • 刪除或標示關聯性為非使用中,以減少模棱兩可。 然後,您可以將關聯性交叉篩選設定為 [兩者]。
  • 將數據表帶入兩次(第二次使用不同的名稱),以消除迴圈。 這樣做會使關聯性的模式像星型架構一樣。 使用星型架構時,所有關聯性都可以設定為 [兩者]。

作用中關聯性錯誤

當 Power BI Desktop 自動建立關聯性時,有時會在兩個數據表之間遇到一個以上的關聯性。 當這種情況發生時,只有其中一個關聯性設定為作用中。 作用中關聯性可作為默認關聯性,因此當您從兩個不同的數據表中選擇字段時,Power BI Desktop 可以自動為您建立視覺效果。 不過,在某些情況下,自動選取的關聯性可能不正確。 使用 [ 管理關聯性 ] 對話框,將關聯性設定為作用中或非使用中,或在 [編輯關聯性] 對話框中設定作用中 關聯 性。

為了確保有默認關聯性,Power BI Desktop 一次只允許兩個數據表之間的單一作用中關聯性。 因此,您必須先將目前的關聯性設定為非使用中,然後設定您想要作用中的關聯性。

我們來看一個範例。 第一個數據表是 ProjectTickets,第二個數據表是 EmployeeRole

ProjectTickets

OpenedBy SubmittedBy 小時 計畫 DateSubmit
1001 佩勒姆,湯姆 Brewer,Alan 22 藍色 1/1/2013
1002 Roman、Daniel Brewer,Alan 26 2/1/2013
1003 羅斯,丹尼爾 Ito,Shu 34 黃色 12/4/2012
1004 佩勒姆,湯姆 Brewer,Alan 13 柳橙 1/2/2012
1005 Roman、Daniel Bowen, Eli 29 紫色 10/1/2013
1006 羅斯,丹尼爾 Bento,Nuno 35 2/1/2013
1007 羅斯,丹尼爾 Hamilton,David 10 黃色 10/1/2013
1008 佩勒姆,湯姆 Han,Mu 28 柳橙 1/2/2012
1009 Roman、Daniel Ito,Shu 22 紫色 2/1/2013
1010 羅斯,丹尼爾 Bowen, Eli 28 10/1/2013
1011 佩勒姆,湯姆 Bowen, Eli 9 藍色 10/15/2013

EmployeeRole

員工 角色
Bento,Nuno 專案經理
Bowen, Eli 專案負責人
Brewer,Alan 專案經理
Hamilton,David 專案負責人
Han,Mu 專案負責人
Ito,Shu 專案負責人
佩勒姆,湯姆 項目贊助者
Roman、Daniel 項目贊助者
羅斯,丹尼爾 項目贊助者

這裡實際上有兩個關聯性:

  • EmployeeRole 數據表中的 Employee 與 ProjectTickets 數據表中的 SubmittedBy 之間。
  • 在 ProjectTickets 數據表中的 OpenedByEmployeeRole 數據表中的 Employee 之間

Screenshot of a two-relationship example.

如果我們將這兩個關聯性新增至模型 (OpenedBy first),則 [ 管理關聯性 ] 對話框會顯示 OpenedBy 為使用中:

Screenshot of a OpenedBy active in the Manage relationships dialog box.

現在,如果我們建立使用 EmployeeRole 中 [角色] 和 [員工] 欄位的報表,以及報表畫布中數據表視覺效果中 ProjectTickets 的 [時數] 字段,我們只會看到項目贊助者,因為它們是唯一開啟專案票證的專案。

Screenshot shows the Employee, Role, and Hours fields selected.

我們可以變更作用中的關聯性,並取得 SubmittedBy ,而不是 OpenedBy。 在 [管理關聯性] 中,取消核取 ProjectTickets(OpenedBy)EmployeeRole(Employee) 關聯性,然後檢查 EmployeeRole(Employee)Project Tickets(SubmittedBy) 關聯性。

Screenshot of changing the active relationship in the Manage relationship dialog box.

在關聯性檢視中查看所有關聯性

有時候您的模型之間有多個數據表和複雜的關聯性。 Power BI Desktop 中的關聯 性檢視會顯示模型中的所有關聯性、其方向和基數,以易於瞭解和可自定義的圖表。

若要深入瞭解,請參閱 在Power BI Desktop中使用關聯性檢視。

疑難排解

本節提供在 Power BI 中使用關聯性時的指引和疑難解答資訊。

無法判斷欄位之間的關聯性

Power BI 會藉由從所使用的模型推斷關聯性,嘗試在視覺效果中顯示相關數據。 有時候這類推斷並不明顯,您可能會驚訝於在視覺效果中看到錯誤,指出特定數據行之間沒有關聯性。

為了說明 Power BI 如何判斷欄位是否相關,讓我們使用範例模型來說明下列各節中的幾個案例。 下圖顯示我們將用於範例案例的範例模型。

Screenshot of a sample model used in troubleshooting scenarios.

案例 1:傳統星型架構,未提供量值條件約束。 在參考上一個影像中的範例模型時,讓我們先查看影像的右半部,以及 廠商 - 購買 - 產品 數據表。 此範例是具有 Fact 資料表 (購買) 和兩個維度數據表 (Product and Vendor) 的傳統星型架構。 維度數據表與事實數據表之間的關聯性是 1 到多 (一個產品對應至許多購買,一個廠商對應至許多購買)。 在這種類型的架構中,我們可以回答產品 X 有哪些銷售?以及廠商 Y 銷售有哪些銷售?以及廠商 Y 銷售哪些產品?

如果我們想要讓產品和廠商相互關聯,我們可以查看購買數據表,以查看是否有專案與相同的產品和廠商。 範例查詢看起來可能類似下列範例:

Correlate Product[Color] with Vendor[Name] where CountRows(Purchases)>0

where CountRows(Purchases)>0是 Power BI 會新增的隱含條件約束,以確保傳回相關數據。 透過購買數據表執行這項相互關聯,我們可以傳回在事實數據表中至少有一個專案的產品廠商配對,從數據的觀點來看,配對是有意義的。 您可以預期任何從未銷售過的產品廠商的不區分組合(不會用於分析),都不會顯示。

案例 2:提供傳統的星型架構和量值條件約束。 在案例 1 的上一個範例中,如果使用者以摘要數據行的形式提供條件約束(例如,總和/平均/購買數量計數)或模型量值(相異的 VendID 計數),Power BI 就可以以下列範例的形式產生查詢:

Correlate Product[Color] with Vendor[Name] where MeasureConstraint is not blank

在這種情況下,Power BI 會嘗試傳回對使用者提供之條件約束有意義的值的組合(非空白)。 Power BI 不需要也新增自己的 CountRows(購買)>0 隱含條件約束,例如先前案例 1 中所做的工作,因為使用者所提供的條件約束已足夠。

案例 3:非星型架構和未提供量值條件約束。 在此案例中,我們會將注意力集中在模型的中心,其中我們有 Sales - Product - Purchases 數據表,其中我們有一個維度數據表 (Product) 和兩個事實數據表 (SalesPurchases)。 由於此範例不是星型架構,因此無法回答與案例 1 中相同的問題。 假設我們嘗試將購買和銷售相互關聯,因為購買與 Product多對 1 關聯性,而 Product 與 Sales1 到 1關聯性。 銷售和購買間接多對多。 我們可以將一個產品連結到許多購買,一個產品連結到許多銷售,但我們無法將一個銷售連結到許多購買,反之亦然。 我們只能將許多 購買 連結至許多 銷售

在此情況下,如果我們嘗試在視覺效果中結合 Purchase[VenID]Sales[CustID] ,Power BI 就沒有可套用的具體條件約束,因為 這些數據表之間的多對多 關聯性。 雖然可能會有自定義條件約束(不一定源於模型中建立的關聯性),但可以套用至各種案例,但 Power BI 無法僅根據關聯性推斷預設條件約束。 如果 Power BI 嘗試傳回這兩個數據表的所有組合,則會建立大型交叉聯結,並傳回非相關數據。 Power BI 不是這樣,而是在視覺效果中引發錯誤,例如下列內容。

Screenshot of an error dialog when relationship can’t be inferred. Alternatively, Screenshot of an error dialog where relationship isn’t inferred.

案例 4:提供的非星型架構和量值條件約束。 如果我們從案例 3 取得範例,並以摘要數據行 (例如 Product[ProdID] 的計數) 或模型量值 (Sales[Total Qty] 的形式新增使用者提供的條件約束),Power BI 就可以以 Correlate Purchase[VenID]Sales[CustID] 的形式產生查詢,其中 MeasureConstraint 不是空白。

在此情況下,Power BI 會將用戶的條件約束視為唯一的條件約束 Power BI 需要套用,並傳回為其產生非空白值的組合。 用戶已引導Power BI前往所需的案例,而Power BI會套用指導方針。

案例 5:提供量值條件約束時,但與數據行部分相關。 在某些情況下,使用者所提供的量值條件約束與視覺效果中的所有數據行並不完全相關。 模型量值一律會與所有專案產生關聯。 Power BI 會在嘗試在視覺效果中尋找數據行之間的關聯性時,將此案例視為黑匣子,並假設使用者知道他們正在使用它做什麼。 不過,摘要數據行的格式 為 SumAverage,以及從使用者介面選擇的類似摘要,只能與視覺效果中使用的數據行/數據表子集相關,該數據行所屬的數據表關聯性。 因此,條件約束會套用至數據行的一些配對,但不適用於所有數據行。 在此情況下,Power BI 會嘗試尋找默認條件約束,它可以套用至使用者提供之條件約束未相關的數據行(例如案例 1)。 如果 Power BI 找不到任何專案,則會傳回下列錯誤。

Screenshot of an error dialog when Power BI can’t find default constraints.

解決關聯性錯誤

當您看到 無法判斷欄位 錯誤之間的關聯性時,您可以採取下列步驟來嘗試解決錯誤:

  1. 檢查您的模型。 是否針對您想要從分析中回答的問題類型進行適當設定? 您可以變更資料表之間的一些關聯性嗎? 您是否可以避免建立間接 多對多

    請考慮將反向 V 圖形架構轉換成兩個數據表,並使用兩個數據表之間的直接多對多關聯性,如在 Power BI Desktop 中套用多對多關聯性中所述

  2. 以摘要數據行或模型量值的形式,將條件約束新增至視覺效果。

  3. 如果加入摘要數據行,但仍有錯誤,請考慮使用模型量值。

如需模型和關聯性的詳細資訊,請參閱下列文章: