当连接到使用 DirectQuery 的数据源时,你可以使用“假设引用完整性”,以对数据源运行更高效的查询。 此功能对基础数据有一些要求,仅在使用 DirectQuery 时或在 Microsoft Fabric 的语义模型中在 Direct Lake 模式下可用。
注释
假定只能使用 Web 浏览器通过服务设置Microsoft Fabric 语义模型的引用完整性设置。 无法使用 Power BI Desktop 设置它。
设置“假设引用完整性”允许数据源上的查询使用 INNER JOIN 语句而不是 OUTER JOIN 语句,从而提高查询效率。
使用假设引用完整性的要求
这是一项高级设置,仅在连接到使用 DirectQuery 的数据时才可用。 若要使“假设引用完整性”正常工作,必须满足以下要求:
- 关系中 From 列中的数据始终不能为 Null 或 空白
- From 列中的每个值在 To 列中都有对应的值
在这种情况下,From 列是一对多关系中的“多”,或是一对一关系中第一个表中的列。
使用假设引用完整性的示例
下面的示例演示了在数据连接中使用“假设引用完整性”时,“假设引用完整性”的行为方式。 该示例连接到包含订单表、产品表和仓库表的数据源。
下图显示了 Orders 表和 Products 表,引用完整性存在于 Orders[ProductID] 和 Products[ProductID] 之间。 Orders 表中的 [ProductID] 列始终不能为 Null ,所有值也会出现在 Products 表中。 在这种情况下,应设置“假设引用完整性”以获得更高效的查询。 使用此设置不会更改视觉对象中显示的值。
在下一个图像中,请注意 Orders[DepotID] 和 Depots[DepotID] 之间不存在引用完整性,因为某些 Orders 的 DepotID 为 Null 。 因此,不应设置假定引用完整性的选项。
最终,下表中的 Orders[CustomerID] 和 Customers[CustID] 之间不存在引用完整性。 CustomerID 包含一个值(即 CustX),这些值不存在于 Customers 表中。 因此,不应设置假定引用完整性。
设置假设引用完整性
若要启用此功能,请选中“假设引用完整性”,如下图所示。
选中后,将对数据验证此设置,以确保没有 Null 或不匹配的行。 但是,对于具有大量值的情况,验证不能保证没有引用完整性问题。
此外,验证发生在编辑关系时, 不会 反映对数据所做的任何后续更改。
如果错误地设置了假设引用完整性,会发生什么?
如果在数据中有引用完整性问题时设置“假设引用完整性”,该设置不会导致错误。 但是,会导致数据明显不一致。 例如,在这里所述的 Depots 表的关系下,会导致以下结果:
- 视觉对象显示总的“订单数量”值为 40。
- 视觉对象显示总的“按仓库城市的订单数量”值仅为 30,因为它不包含订单 ID 1(其 DepotID 为 Null)。
相关内容
- 详细了解 DirectQuery。
- 详细了解 Power BI 中的关系。
- 详细了解 Power BI Desktop 中的模型视图。