人生没有彩排
每一天都是现场直播

XF.Analysis.Cumulative

语法作用

计算基于数值排序的累计值。第一参数:任意返回表的表达式,第二参数:任意标量表达式,将在外部计值环境和第一参数提供的行上下文中计值。

将迭代第一参数的表的每一行,计算第二参数的表达式,并以第二参数在外部计值环境中的结果为当前值,最后根据sortOrder参数返回累计结果(0=降序/计算大于等于当前值的和,1=升序/计算小于等于当前值的和),

注:如果当前值为空则直接返回空值,另外降序累计时如果当前值比任意明细都大则会返回明细之和。

XF.Analysis.Cumulative(tbl:table,expression:expr,sortOrder:int64)

函数代码

该函数的实现代码如下:

/// 计算基于数值排序的累计值。第一参数:任意返回表的表达式,第二参数:任意标量表达式,将在外部计值环境和第一参数提供的行上下文中计值。将迭代第一参数的表的每一行,计算第二参数的表达式,并以第二参数在外部计值环境中的结果为当前值,最后根据sortOrder参数返回累计结果(0=降序/计算大于等于当前值的和,1=升序/计算小于等于当前值的和),注:如果当前值为空则直接返回空值,另外降序累计时如果当前值比任意明细都大则会返回明细之和
FUNCTION XF.Analysis.Cumulative = (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(FILTER(TempTbl,[Val]<=BaseVal),[Val]),
                IF(MAXX(TempTbl,[Val])<BaseVal,
                    SUMX(TempTbl,[Val]),
                    SUMX(FILTER(TempTbl,[Val]>=BaseVal),[Val])
                )
            )
        )
    )

应用示例

按产品类别分类,降序累计各产品的采购价格。

XF.Analysis.Cumulative(ALL('产品'[产品名称]),[采购价],0)

结果如下图所示:

需要注意的是,该函数不适合需要明确区分重复值的场景,如果需要逐个处理重复值以得到不同的累计值,则可以使用XF.Analysis.CumulativeExact函数。

赞(0) 打赏
版权声明:本文为夕枫的原创文章,著作权归作者所有,未经允许不得转载
文章名称:《PowerBI DAX自定义函数-XF.Analysis.Cumulative》
文章链接:https://www.ximaple.com/posts/1554.html
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论

觉得文章有用的话就支持一下吧~

感谢您的打赏支持,我将持续输出有价值的内容!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册

Operation don't support