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

XF.Analysis.CumulativePct

语法作用

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

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

注意:如果当前值为空则直接返回空值。

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

函数代码

该函数的实现代码如下:

/// 计算基于数值排序的累计占比。第一参数:任意返回表的表达式,第二参数:任意标量表达式,将在外部计值环境和第一参数提供的行上下文中计值。将迭代第一参数的表的每一行,计算第二参数的表达式,并以第二参数在外部计值环境中的结果为当前值,最后根据sortOrder参数计算累计值(0=降序/计算大于等于当前值的和,1=升序/计算小于等于当前值的和),最终将累计值除以总计得出累计占比。注:如果当前值为空则直接返回空值
FUNCTION XF.Analysis.CumulativePct = (tbl:table,expression:expr,sortOrder:int64) => 
    VAR BaseVal = expression
    RETURN
    IF(NOT sortOrder IN {0,1},
        ERROR("sortOrder参数的可选取值仅为0或1"),
        IF(NOT ISBLANK(BaseVal),
            VAR TempTbl = ADDCOLUMNS(tbl,"Val",expression)
            VAR TotalVal = SUMX(TempTbl,[Val])
            VAR CumulativeSum = 
                IF(sortOrder>0,
                    SUMX(FILTER(TempTbl,[Val]<=BaseVal),[Val]),
                    IF(MAXX(TempTbl,[Val])<BaseVal,
                        TotalVal,
                        SUMX(FILTER(TempTbl,[Val]>=BaseVal),[Val])
                    )
                )
            RETURN
            DIVIDE(CumulativeSum,TotalVal)
        )
    )

应用示例

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

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

结果如下图所示:

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

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

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

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

支付宝扫一扫

微信扫一扫

登录

找回密码

注册

Operation don't support