FIRSTNONBLANKVALUE 和 LASTNONBLANKVALUE 与不带 VALUE 的姊妹函数使用相同语法形式,前者返回的是<Expression>的值,后者返回的是<ColumnName>的值。
FIRSTNONBLANKVALUE / LASTNONBLANKVALUE
FIRSTNONBLANKVALUE ( < ColumnName>, < Expression> ) LASTNONBLANKVALUE ( < ColumnName>, < Expression> )
<ColumnName>在当前筛选上下文中每行计值<Expression>,返回结果不为空的第一个或最后一个<ColumnName>对应的<Expression>的值。
示例用法
思考下面三个表达式:
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 将行上下文进行了转换。
LASTNONBLANK 和 LASTNONBLANKVALUE 可以以一种相对简单的写法计算复杂结果,但缺点是在某些个别情况下可能会带来性能问题。原因在于它们是迭代函数,在行上下文中对第二个参数中提供的表达式求值;这个过程通常伴随着上下文转换,就像每次在迭代函数中计算度量值一样。由于上下文转换需要物化,这可能会延长执行时间和增加查询时所需的内存。
请问老师增量刷新中,如果我在加载my sql数据的时候 使用了高级功能,即直接使用了SQL语句,就没办法生成本机查询,请问老师遇到过这种情况吗?该如何处理
需要注意的是,虽然这两个函数也被归为迭代函数,但它们的参数在筛选上下文中计值,而不存在行上下文环境,这是由于存在一个隐式的 CALCULATE 将行上下文进行了转换。
老师,这里的意思是:FIRSTNONBLANKVALUE、LASTNONBLANKVALUE函数在书写时,即使参数未书写CALCULATE,也会将行上下文转换为筛选上下文。
是这个意思吗?
老师,能帮我看下计值流程吗,为什么LASTNONBLANKVALUE返回了空值,而其等价形式却可以得到结果
f1返回的为什么不是杨建,他对应的销售额不是1吗
F3这个太坑了……是不是微软在做函数时,觉得每次都要加个calculate太麻烦,就自动转成筛选上下文了。
未来firstnonblank会不会也改成这样,要不逻辑不统一,太难受了
老师,F3是否返回空白?为什么说同F2结果一样?