多对多关系:两表的关系列都含有重复值。在 Power BI 支持多对多关系之前,关系涉及的列至少有一个必须包含唯一值。 不过,在某些场景下可能没有列包含唯一值,比如分析订单和产品的时候,一个订单包含多个产品,一个产品也可以属于多笔订单,通常的解决方法是在模型中引入包含必要唯一值的附加表,也称做桥接表。现在借助多对多关系,你可以直接连接此类表,关于多对多关系稍后将专门发文介绍。
如果你想从位于关系的多端表中访问关系一侧的列,正如本例中的情况,可使用 RELATED 函数。RELATED 接受列名作为参数,从当前行上下文开始通过沿着多对一方向中的现有关系来发现相应行并检索列值。
下面的写法可以纠正之前的公式:
Sales[UnitPriceVariance] = Sales[UnitPrice] - RELATED ( Product[UnitPrice] )
复制代码
RELATED 在位于关系多端的表的行上下文上工作,如果关系一端的行上下文是活动的,那么这个函数就不适用了,因为按照关系返回的结果会包含多行。在这种情况下,需要使用 RELATED 的伴侣 RELATEDTABLE 函数,你可以在关系的一端使用 RELATEDTABLE,它返回与当前表相关的位于关系多端的表的所有行。例如,如果你想计算每个产品的销售记录数,你可以使用下面的公式,用作产品表的计算列:
RELATED 和 RELATEDTABLE 唯一的一个例外规则是在一对一关系的时候,如果两表是一对一关系,那么你可以在两个表中同时使用 RELATED 或 RELATEDTABLE,结果得到一列值或一个只有一行的表,这取决于你使用的函数。
关于关系链的唯一限制是,所有关系都需要具有相同的类型(即一对多或多对一),并且它们都朝着相同的方向传递。如果有两个表之间通过一对多和多对一进行关联,中间有一个桥接表,那么 RELATED 和 RELATEDTABLE 都不能工作。一对一关系是一对多和多对一的集合体,因此可以在一对多关系链中使用一对一关系而不会造成关系中断。