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

理解 FIRSTNONBLANKVALUE 和 LASTNONBLANKVALUE

FIRSTNONBLANKVALUELASTNONBLANKVALUE 与不带 VALUE 的姊妹函数使用相同语法形式,前者返回的是<Expression>的值,后者返回的是<ColumnName>的值。

2024 年 2 月版本的 Power BI Desktop 中此函数在某些场景下的计算结果发生了变化,具体原因会在调查后补充

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 返回地区经理列表中销售额不为空的第一个经理,因为地区经理列的使用的是中文文本,对第一个的判断有两种情况,Excel PowerPivot 按首字母顺序返回第一个经理,答案是「楚杰」;Desktop 返回的是杨建(此处详见上一篇文章的介绍)

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

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

等价形式

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

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

需要注意的是,虽然这两个函数也被归为迭代函数,但它们的<表达式>参数在筛选上下文中计值,而不存在行上下文环境,这是由于存在一个隐式的 CALCULATE行上下文进行了转换。

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

这两个函数的内在行为类似 SUMMARIZECOLUMNS,在某些嵌套使用的情景下(比如作为迭代函数的第二参数)可能会得到异常结果,未来的这种值行为可能会发生变化,建议你尽量避免嵌套使用。

23
说点什么

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

请问老师增量刷新中,如果我在加载my sql数据的时候 使用了高级功能,即直接使用了SQL语句,就没办法生成本机查询,请问老师遇到过这种情况吗?该如何处理

成员
做一名学霸

需要注意的是,虽然这两个函数也被归为迭代函数,但它们的参数在筛选上下文中计值,而不存在行上下文环境,这是由于存在一个隐式的 CALCULATE 将行上下文进行了转换。

老师,这里的意思是:FIRSTNONBLANKVALUE、LASTNONBLANKVALUE函数在书写时,即使参数未书写CALCULATE,也会将行上下文转换为筛选上下文。
是这个意思吗?

成员
xifeng

老师,能帮我看下计值流程吗,为什么LASTNONBLANKVALUE返回了空值,而其等价形式却可以得到结果 爱你

2.jpg
1.jpg
成员
过路者

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

成员
大M

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

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

成员
139****3194

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

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数