从数据到信息
从信息到洞察

关系函数

为了便于在公式模型内部操作关系,DAX 提供了两个非常有用的函数:RELATED 和 RELATEDTABLE.

你已经知道,计算列可以在定义它的表中引用列值,因此,在销售表中定义的计算列可以引用所在表的任何列。但是,如果必须引用另一个表中的列,该怎么办呢?通常,除非模型中定义了两个表之间的关系,否则不能使用其他表中的列。如果两个表建立了关系,那么可以使用 RELATED 函数访问相关表中的列。

从关系的多端访问一端

例如,你可能希望在销售表中定义这样一个计算列,该列检查已销售的产品是否属于“手机”类别,当满足条件时,适当缩减标准成本。要计算这样一个列,你必须使用一个条件来检查产品类别的值,该值不在销售表中。然而,模型中的关系链从销售表开始,通过产品表和产品子类别表到达产品类别表,如下图所示。

Sales 表和 Product Category 表通过关系链接到一起

从原始表到目标表之间需要经过多少步并不重要,DAX 将遵循完整的关系链,并返回相关列值。因此,可调整成本(AdjustedCost)列的公式为:

Sales[AdjustedCost] =
IF (
    RELATED ( 'Product Category'[Category] ) = "Cell Phone",
    Sales[UnitCost] * 0.95,
    Sales[UnitCost]
)

在一对多关系中,RELATED 可以从多端访问一端,因为在这种情况下,关联表中只有一行(如果有的话)。如果不存在满足条件的行,RELATED 返回空。

从关系的一端访问多端

如果你希望从关系的一端访问多端,那么 RELATED 就不适用了,因为另一端(关系的多端)可能存在许多行对单个行可用。在这种情况下,可以使用 RELATEDTABLE。RELATEDTABLE 返回一个表,其中包含与当前表相关的所有行。例如,如果你想知道每个类别中有多少个产品,你可以使用以下公式在产品类别表中创建一个列:

COUNTROWS ( RELATEDTABLE ( Product ) )

此计算列将显示每个产品类别的相关产品数量,如图所示。

使用 RELATEDTABLE 计算每个类别的产品数量

就像 RELATED 一样,RELATEDTABLE 沿着模型关系链,总是从一端指向多端。

RELATEDTETABLE 函数执行从行上下文到筛选上下文的转换,并在生成的筛选上下文中计值表达式。它是 CALCULATETABLE 的简化版,没有其他筛选器,只接受表引用而不接受表达式。

 

扩展阅读:

理解关系

说点什么

avatar
1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒