[知识体系] 理解 FIRSTNONBLANKVALUE 和 LASTNONBLANKVALUE

  [复制链接]
查看201918 | 回复163 | 2021-2-21 19:06:43 | 显示全部楼层 |阅读模式
FIRSTNONBLANKVALUELASTNONBLANKVALUE 的计算行为与 FIRSTNONBLANKLASTNONBLANK 相同,唯一的区别在于返回结果的不同,前者返回的是《Expression》的值,后者返回的是《ColumnName》的值。
FIRSTNONBLANKVALUE / LASTNONBLANKVALUE
  1. FIRSTNONBLANKVALUE ( < ColumnName>, < Expression> )
  2. LASTNONBLANKVALUE ( < ColumnName>, < Expression> )
复制代码


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

示例用法

7124211936391.png

示例表:Table


思考下面三个表达式:

  1. F1 = FIRSTNONBLANK('Table'[地区经理],CALCULATE(SUM('Table'[销售额])))
  2. F2 = FIRSTNONBLANKVALUE('Table'[地区经理],CALCULATE(SUM('Table'[销售额])))
  3. F3 = FIRSTNONBLANKVALUE('Table'[地区经理],SUM('Table'[销售额]))
复制代码


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


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


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

等价形式



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

  1. CALCULATE (
  2.     <Expression>,
  3.     FIRSTNONBLANK (
  4.         <ColumnName>,
  5.         CALCULATE ( <Expression> )
  6.     )
  7. )
复制代码


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


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

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

回复

使用道具 举报

yuanliwuyan | 2021-4-24 16:55:01 来自手机 | 显示全部楼层
锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!
回复

使用道具 举报

alandeng | 2021-5-4 15:30:41 | 显示全部楼层
元芳你怎么看?
回复

使用道具 举报

louisking | 2021-5-4 16:24:41 来自手机 | 显示全部楼层
发发呆,回回帖,工作结束~
回复

使用道具 举报

宇文寒涛 | 2021-5-18 16:39:42 | 显示全部楼层
努力蜕变中
回复

使用道具 举报

topboy2000 | 2021-6-23 07:59:40 | 显示全部楼层
支持一下,天天来这学习
回复

使用道具 举报

open168 | 2021-6-25 11:35:00 | 显示全部楼层
一直在看
回复

使用道具 举报

wy0009 | 2021-7-10 16:22:32 | 显示全部楼层
楼猪V5啊
回复

使用道具 举报

珠海小西 | 2021-7-18 18:19:37 | 显示全部楼层
纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下
回复

使用道具 举报

马路流星 | 2021-8-2 09:55:42 | 显示全部楼层
是爷们的娘们的都帮顶!大力支持
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则