语法作用
计算基于数值排序的累计值,这是XF.Analysis.Cumulative函数的精确版本,用于要累计的值存在重复时的场景,该函数将逐个处理重复值以得到不同的累计值。
注意:该函数的实现使用窗口函数来定位当前值,将以tbl参数作为窗口函数的relation参数,使用时需要满足窗口函数的限制。最佳实践:将要累计的维度字段作为tbl参数。
XF.Analysis.CumulativeExact(tbl:table,expression:expr,sortOrder:int64)
函数代码
该函数的实现代码如下:
/// 计算基于数值排序的累计值,这是XF.Analysis.Cumulative函数的精确版本,用于要累计的值存在重复时的场景,该函数将逐个处理重复值以得到不同的累计值。注意:该函数的实现使用窗口函数来定位当前值,将以tbl参数作为窗口函数的relation参数,使用时需要满足窗口函数的限制。最佳实践:将要累计的维度字段作为tbl参数
FUNCTION XF.Analysis.CumulativeExact = (tbl:table,expression:expr,sortOrder:int64) =>
VAR BaseVal = expression
VAR TempTbl = ADDCOLUMNS(tbl,"Val",expression)
RETURN
IF(NOT sortOrder IN {0,1},
ERROR("sortOrder参数的可选取值仅为0或1"),
IF(NOT ISBLANK(BaseVal),
IF(sortOrder>0,
SUMX(
WINDOW(1,ABS,0,TempTbl,ORDERBY([Val],ASC)),
[Val]
),
IF(MAXX(TempTbl,[Val])<BaseVal,
SUMX(TempTbl,[Val]),
SUMX(
WINDOW(1,ABS,0,TempTbl,ORDERBY([Val],DESC)),
[Val]
)
)
)
)
)
应用示例
按产品类别分类,降序累计各产品的采购价格。
XF.Analysis.CumulativeExact(ALL('产品'[产品名称]),[采购价],0)
结果如下图所示:

此外,与XF.Analysis.Cumulative函数相比,XF.Analysis.CumulativeExact函数可用于要累计的值存在重复时的场景,该函数将逐个处理重复值以得到不同的累计值。如下图所示:






