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

返回表的表达式

我们经常使用返回表的表达式作为其他 DAX 函数的参数,比如 RELATEDTABLE

在迭代表的函数中, 表的每行计值 DAX 表达式,这里的表就可以使用返回表的表达式来做进一步约束。

使用方法

[Sales Amount] :=
SUMX (
    Sales,
    Sales[Quantity] * Sales[Unit Price]
)

你可以使用其他表函数替换对销售表引用。例如, 你可以使用 FILTER 函数筛选数量大于 1 的销售记录:

[Sales Amount Multiple Items] :=
SUMX (
    FILTER (
        Sales,
        Sales[Quantity] > 1
    ),
    Sales[Quantity] * Sales[Unit Price]
)

计算列中, 还可以使用 RELATEDTABLE 函数检索位于一对多关系多端的表的所有行。例如,以下产品表的计算列统计所有产品对应的销售金额:

Product[Product Sales Amount] =
SUMX (
    RELATEDTABLE ( Sales ),
    Sales[Quantity] * Sales[Unit Price]
)

关系函数理解关系这两篇文章中,可以找到 RELATEDTABLE 的详细说明。

你可以将对表函数的调用嵌套在同一个 DAX 表达式中,因为任何表表达式都可以是对表函数的调用。例如,在下面的产品表计算列中,只考虑数量大于 1 的销售记录,计算产品销售额。

Product[Product Sales Amount Multiple Items] =
SUMX (
    FILTER (
        RELATEDTABLE ( Sales ),
        Sales[Quantity] > 1
    ),
    Sales[Quantity] * Sales[Unit Price]
)

当发生表函数的嵌套调用时, DAX 首先计算最内层函数, 然后逐级计算到最外层。不要将此规则与 CALCULATE 函数调用参数时的计算顺序混淆。

正如你稍后将看到的, 嵌套调用的执行顺序可能是造成理解混乱的根源, 因为 CALCULATETABLE 的计值顺序与 FILTER 不同。在迭代函数章节, 你将了解 FILTER 的行为, 在 CALCUALTE 函数一节会介绍关于 CALCULATETABLE 的内容。

其他表函数

DAX 中有很多可以返回表的函数,如 ALLADDCOLUMNSINTERSECTSUMMARIZETOPN 等等,基于这些表函数可以衍生出各种灵活的表表达式,这些表函数将在各自对应的章节中介绍。

 

7
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
2 评论数
5 被回复的评论
5 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
成员
简单

Product[Product Sales Amount Multiple Items] =
SUMX (
FILTER (
RELATEDTABLE ( Sales ),
Sales[Quantity] > 1
),
Sales[Quantity] * Sales[Unit Price]
)
作为度量值应用于矩阵中行上有筛选这个筛选是筛选那个表呢?是RELATEDTABLE ( Sales )生成的表还是sales表?谢谢

成员
139****3194

老师,最后一个计算列的执行顺序:
1.产品表第一行转换筛选上下文;
2. 筛选sales表;
3.filter迭代被筛选后的sales表
4. 迭代计算每行的数量乘以 价格
5.sumx汇总

老师,如不对,应该怎样顺序?谢谢

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数