语法作用
返回下一个非空值。将按tbl参数的所有字段升序排序,然后基于当前行查找其下一个expression参数不为空的行,然后返回该行所对应的expression参数的值。
如果当前行的expression参数的值为空,则将直接返回空值。第一参数:任意返回表的表达式,第二参数:任意标量表达式,将在外部计值环境和第一参数提供的行上下文中计值。
注意:该函数的实现使用窗口函数来定位当前值,将以tbl参数作为窗口函数的relation参数,使用时需要满足窗口函数的限制。最佳实践:将要排序的维度字段作为tbl参数,另外为避免顺序不正确,建议tbl参数只包含单个字段。
XF.Analysis.NextNonBlankValue(tbl:table,expression:expr)
函数代码
该函数的实现代码如下:
/// 返回下一个非空值。将按tbl参数的所有字段升序排序,然后基于当前行查找其下一个expression参数不为空的行,然后返回该行所对应的expression参数的值。如果当前行的expression参数的值为空,则将直接返回空值。第一参数:任意返回表的表达式,第二参数:任意标量表达式,将在外部计值环境和第一参数提供的行上下文中计值。注意:该函数的实现使用窗口函数来定位当前值,将以tbl参数作为窗口函数的relation参数,使用时需要满足窗口函数的限制。最佳实践:将要排序的维度字段作为tbl参数,另外为避免顺序不正确,建议tbl参数只包含单个字段
FUNCTION XF.Analysis.NextNonBlankValue = (tbl:table,expression:expr) =>
VAR CurVal = expression
RETURN
IF(
NOT ISBLANK(CurVal),
VAR TempTbl = ADDCOLUMNS(tbl,"Val",expression)
VAR PreTbl = FILTER(WINDOW(1,REL,-1,ABS,TempTbl),NOT ISBLANK([Val]))
RETURN
MAXX(INDEX(1,PreTbl),[Val])
)
应用示例
计算下一个非空的销售额。
XF.Analysis.NextNonBlankValue(ALL('Table'[Date]),CALCULATE(SUM('Table'[Sales])))
结果如下图所示:






