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

XF.Analysis.ABCClassExact

语法作用

返回帕累托分析的ABC分类,这是XF.Analysis.ABCClass函数的精确版本,用于要累计的值存在重复时的场景,该函数将逐个处理重复值以得到不同的累计值。

注意:该函数的实现使用窗口函数来定位当前值,将以tbl参数作为窗口函数的relation参数,使用时需要满足窗口函数的限制。最佳实践:将要累计的维度字段作为tbl参数。

XF.Analysis.ABCClassExact(tbl:table,expression:expr,thresholdA:double,thresholdB:double)

函数代码

该函数的实现代码如下:

/// 返回帕累托分析的ABC分类,这是XF.Analysis.ABCClass函数的精确版本,用于要累计的值存在重复时的场景,该函数将逐个处理重复值以得到不同的累计值。注意:该函数的实现使用窗口函数来定位当前值,将以tbl参数作为窗口函数的relation参数,使用时需要满足窗口函数的限制。最佳实践:将要累计的维度字段作为tbl参数
FUNCTION XF.Analysis.ABCClassExact = (tbl:table,expression:expr,thresholdA:double,thresholdB:double) => 
    VAR CurrentVal = expression
    RETURN 
    IF(thresholdA>=thresholdB || thresholdB>=1 || thresholdA<0,
        ERROR("ABC阈值参数的范围错误!"),
        IF(NOT ISBLANK(CurrentVal),
            VAR TempTbl = ADDCOLUMNS(tbl,"@Val",expression)
            VAR TotalVal = SUMX(TempTbl,[@Val])
            VAR CumulativeSum = 
                IF(MAXX(TempTbl,[@Val])<CurrentVal,
                    TotalVal,
                    SUMX(
                        WINDOW(1,ABS,0,TempTbl,ORDERBY([@Val],DESC)),
                        [@Val]
                    )
                )
            VAR CumPct = DIVIDE(CumulativeSum,TotalVal)
            RETURN
            MID("ABC",RANKX({thresholdA,thresholdB,1},[Value],CumPct,ASC),1)
        )
    )

应用示例

按产品名称与采购价进行帕累托分析,返回其对应的ABC分类。其中,累计占比在 0.8 以内为 A 类,在 0.8~0.9 之间为 B 类,其余为 C 类。

现在不需要创建多个度量值,只需要一个函数即可完成,如下图所示:

此外,与XF.Analysis.ABCClass函数相比,XF.Analysis.ABCClassExact函数可用于要累计的值存在重复时的场景,该函数将逐个处理重复值以得到不同的累计值并返回对应的ABC分类。如下图所示:

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

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

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

支付宝扫一扫

微信扫一扫

登录

找回密码

注册

Operation don't support