DAX: 模型的关系

所谓模型的关系,是模型中的两个表,通过两个列建立的连接。关系的用途,是把过滤器从一个表传递到其他表。过滤器传递的方向,是关系的方向;过滤器传递的路径,是由两个表之间相关联的两列组成的。表,表之间的关联,以及关联的方向,也构成了数据模型。因此,对于一个数据模型来说,关系传播的路径是确定的,这意味着,过滤器(Filter)始终以相同的方式传播,并且不会随机变化。但是关系可以被DAX函数禁用,或者通过DAX函数来激活不活跃的关系,以动态改变过滤器上下文。

一,星型数据模型

所谓星型数据模型,就是指多个维度表指向一个Fact表,维度表和Fact表之间的关系是1对多。星型模型的优点是:模型的关系可以有效低传播到Fact表。

二,关系的属性

创建关系是指把表的一列和其他表的一列关联起来,这两列的数据类型必须相同,且关系具有方向,关系的方向就是过滤器的走向。

1,关系的基数(cardinality)类型

基数有四种,分别代表from列和to列的数据特征:

  • One-to-many (1:*):from列的值是唯一的,且from列的一个值对应to列的多个值,其他基数类型,读者自己推演。
  • Many-to-one (*:1)
  • One-to-one (1:1)
  • Many-to-many (*:*)

需要注意的是:基数类型的one端,必须是包含唯一值的列。

2,关系的方向

关系的方向也称作交叉过滤方向(Cross filter direction),这个设置决定了过滤器传播的方向,交叉过滤的方向取决于基数类型,如下表所示:

顾名思义,

  • Single:表示单向
  • Both:表示双向

三,跟关系有关的DAX函数

  • RELATED: 从关系的one端获取一个值,用于在Row Context中从其他表获取一个数据
  • RELATEDTABLE: 从关系的many端获取一个表
  • USERELATIONSHIP: 在CALCULATE函数中使用一个不活跃的关系
  • CROSSFILTER:把关系的方向(cross filter direct)修改为single或both,或者把关系的传播禁掉。
  • TREATAS:把一个表表达式的结果作为模型关系中的一个表,该函数作用的结果是:这个表表达式等价于关系中的一个表,因此,该表达式可以作为一个过滤器,并传播过滤器上下文,用于对数据集进行过滤。

四,关系评估(Relationship evaluation)

从评估的角度来看,模型关系分为常规关系和有限关系。实际上,它是根据两个关联表的基数类型和数据源推断出来的。了解评估类型非常重要,因为如果数据完整性受损,可能会对性能或其他方面产生影响。本主题将介绍这些影响和完整性后果。

首先,需要一些建模理论才能完全理解关系评估。

导入模型或 DirectQuery 模型的所有数据都来自 Vertipaq 缓存或源数据库。在这两种情况下,Power BI 都能确定关系的“一”侧存在。

然而,复合模型可以包含使用不同存储模式(导入、DirectQuery 或双重)的表,或多个 DirectQuery 源。每个源(包括导入数据的 Vertipaq 缓存)都被视为一个源组。然后,模型关系可以分为源组内或源组间/跨源组。源组内关系关联源组内的两个表,而源组间/跨源组关系关联两个源组之间的表。请注意,导入或 DirectQuery 模型中的关系始终是源组内的关系。

 1,常规关系

当查询引擎能够确定关系的“一”侧时,模型关系即为常规关系。它确认“一”侧列包含唯一值。所有一对多源组内关系均为常规关系。

对于导入模型,所有数据都存储在 Vertipaq 缓存中,Power BI 会在数据刷新时为每个常规关系创建一个数据结构。这些数据结构由所有列到列值的索引映射组成,其目的是在查询时加速表的连接。

在查询时,常规关系允许进行表扩展。表扩展会创建一个虚拟表,方法是包含基表的原生列,然后扩展为相关表。对于导入表,表扩展在查询引擎中完成;对于 DirectQuery 表,表扩展在发送到源数据库的原生查询中完成(只要未启用“假定引用完整性”属性)。然后,查询引擎会对扩展后的表进行操作,应用筛选器并根据扩展表列中的值进行分组。

空白虚拟行:

  • 对于一对多关系,表扩展通过使用 LEFT OUTER JOIN 语义从“多”侧向“一”侧进行。当“多”侧到“一”侧不存在匹配值时,会向“一”侧表添加一个空白虚拟行。此行为仅适用于常规关系,不适用于有限关系。
  • 一对一源组内关系也会进行表扩展,但使用 FULL OUTER JOIN 语义。此连接类型可确保在必要时在任意一侧添加空白虚拟行。
  • 空白虚拟行实际上是未知成员。未知成员表示违反了引用完整性,即“多”侧值没有对应的“一”侧值。理想情况下,这些空白不应该存在。可以通过清理或修复源数据来消除它们。

2,有限关系(Limited relationships)

当模型关系无法保证“一”侧时,该关系即为有限关系。有限关系可能由以下两个原因造成:

  • 该关系使用多对多基数类型(即使一列或两列包含唯一值)。
  • 该关系为跨源组关系(这种情况只适用于复合模型)。

对于导入模型,永远不会为有限关系创建数据结构。在这种情况下,Power BI 会在查询时解析表连接。

有限关系永远不会发生表扩展。表连接是通过使用 INNER JOIN 语义实现的,因此,不会添加空白虚拟行来补偿引用完整性违规。

还有其他与有限关系相关的限制:

  • RELATED DAX 函数不能用于检索“一”侧列的值。
  • 强制执行 RLS 存在拓扑限制。

原文:Model relationships in Power BI Desktop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悦光阴

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值