在 Power BI Desktop 中应用假设引用完整性设置
当连接到使用 DirectQuery 的数据源时,你可以使用“假设引用完整性”,以对数据源运行更高效的查询。 此功能对基础数据有一些要求,并且仅在使用 DirectQuery 时可用。
设置“假设引用完整性”允许数据源上的查询使用 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 中的模型视图。