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

理解 FIRSTNONBLANKVALUE 和 LASTNONBLANKVALUE

FIRSTNONBLANKVALUELASTNONBLANKVALUE 的计算行为与 FIRSTNONBLANKLASTNONBLANK 相同,唯一的区别在于返回结果的不同,前者返回的是<Expression>的值,后者返回的是<ColumnName>的值。

FIRSTNONBLANKVALUE / LASTNONBLANKVALUE

FIRSTNONBLANKVALUE ( < ColumnName>, < Expression> ) 
LASTNONBLANKVALUE ( < ColumnName>, < Expression> )

<ColumnName>在当前筛选上下文中每行计值<Expression>,返回结果不为空的第一个或最后一个<ColumnName>对应的<Expression>的值。

示例用法

示例表:Table

思考下面三个表达式:

F1 = FIRSTNONBLANK('Table'[地区经理],CALCULATE(SUM('Table'[销售额])))
F2 = FIRSTNONBLANKVALUE('Table'[地区经理],CALCULATE(SUM('Table'[销售额])))
F3 = FIRSTNONBLANKVALUE('Table'[地区经理],SUM('Table'[销售额]))

F1 返回地区经理列表中销售额不为空的第一个经理,因为地区经理列的数据类型是文本,按首字母顺序返回第一个经理,答案是「楚杰」

F2 返回销售额不为空的第一个经理对应的销售额,也就是度量值 F1 的结果「楚杰」的销售额 100。注意,FIRSTNONBLANKVALUE 并不是简单的计算<Expression>的最小值,而是<ColumnName>对应的<Expression>的值。

F3 虽然省略了 CALCULATE,但结果与 F2 相同,从这里可以引申出它和 FIRSTNONBLANK 的一个重要不同:< ColumnName>被作为筛选上下文添加到<Expression>的计值环境

等价形式

FIRSTNONBLANKVALUE 等价于以下写法,LASTNONBLANKVALUE 也类似。

CALCULATE (
    <Expression>, 
    FIRSTNONBLANK (
        <ColumnName>, 
        <Expression> 
    )
)

LASTNONBLANKLASTNONBLANKVALUE 可以以一种相对简单的写法计算复杂结果,但缺点是在某些个别情况下可能会带来性能问题。原因在于它们是迭代函数,在行上下文中对第二个参数中提供的表达式求值;这个过程通常伴随着上下文转换,就像每次在迭代函数中计算度量值一样。由于上下文转换需要物化,这可能会延长执行时间和增加查询时所需的内存。

9
说点什么

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

f1返回的为什么不是杨建,他对应的销售额不是1吗

成员
大M

F3这个太坑了……是不是微软在做函数时,觉得每次都要加个calculate太麻烦,就自动转成筛选上下文了。

未来firstnonblank会不会也改成这样,要不逻辑不统一,太难受了 捂脸

成员
139****3194

老师,F3是否返回空白?为什么说同F2结果一样?

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数