在 Power BI Desktop 中套用 [假設引用完整性] 設定

使用 DirectQuery 連接到資料來源時,您可以使用 [假設引用完整性 ] 選項,針對數據源執行更有效率的查詢。 此功能有一些基礎數據的需求,而且只有在使用 DirectQuery 時才可使用。

設定 [假設引用完整性] 可讓數據源上的查詢使用 INNER JOIN 語句,而不是 OUTER JOIN,以改善查詢效率。

Screenshot of an Edit Relationship dialog to select Assume Referential Integrity.

使用假設引用完整性的需求

此設定是進階設定,只有在使用 DirectQuery 連線到數據時才會啟用。 假設引用完整性正常運作時,需要下列需求:

  • 關聯性中 From 數據行中的數據絕不 為 Null空白
  • 針對 From 數據行中的每個值,[到] 資料行中有對應的值

在此內容中,From 數據行是一對多關聯性的對多關聯性,或它是一對一關聯性中第一個數據表中的數據行。

使用假設引用完整性的範例

下列範例示範 假設引用完整性 在數據連線中使用時的行為。 此範例會連接到數據源,其中包含 Orders 資料表、 Products 數據表和 Depots 數據表。

  • 在下圖中,顯示 Orders 數據表和 Products 數據表,Orders[ProductID]Products[ProductID] 之間存在引用完整性。 Orders 數據表中的 [ProductID] 資料行絕不為 Null,而且每個值也會出現在 Products 數據表中 因此, 假設引用完整性 應設定為取得更有效率的查詢。 使用此設定並不會變更視覺效果中顯示的值。

    Screenshot of Orders table and Products table.

  • 在下一個影像中,請注意,Orders[DepotID]Depots[DepotID] 之間沒有引用完整性,因為 DepotID某些 OrdersNull。 因此,不應該設定假設引用完整性

    Screenshot of Orders table and Depots table.

  • 最後,下表中沒有 Orders[CustomerID]Customers[CustID] 之間的引用完整性。 CustomerID 包含一些值,在此案例中為 CustX,不存在於 Customers 數據表中。 因此,不應該設定假設引用完整性

    Screenshot of Orders table and Customers table.

設定假設引用完整性

若要啟用此功能,請選取 [ 假設引用完整性 ],如下圖所示。

Screenshot of an Edit Relationship dialog that allows you to select Assume Referential Integrity.

選取時,會根據數據驗證設定,以確保沒有 Null 或不相符的數據列。 不過,對於具有非常大量值的案例,驗證並不保證沒有引用完整性問題。

此外,驗證會在編輯關聯性時發生,而且不會反映數據的任何後續變更。

如果您未正確設定假設引用完整性,會發生什麼事?

如果您在數據中有引用完整性問題時設定 [假設引用完整性 ],該設定不會產生錯誤。 不過,這確實會導致數據明顯不一致。 例如,針對這裡所述的 Depots 數據表關聯性,會產生下列結果:

  • 顯示訂單數量總計的視覺效果會顯示值為 40
  • 顯示 Depot City 訂單數量總計的視覺效果只會顯示總計 30,因為它不會包含訂單標識碼 1,其中 DepotIDNull