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

关系函数

为了便于在公式模型内部操作关系,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的简化版,没有其他筛选器,只接受表引用而不接受表达式。

 

扩展阅读:

理解关系

原创内容 转载请联系作者授权:PowerBI极客 » 关系函数

说点什么

1000
 
smilegrinwinkmrgreenneutraltwistedarrowshockunamusedcooleviloopsrazzrollcryeeklolmadsadexclamationquestionideahmmbegwhewchucklesillyenvyshutmouth
  订阅本文评论  
提醒

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

时间智能函数

统计类函数

投影函数

分组函数

连接函数

集合函数

其他常见函数