语法作用
返回帕累托分析的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分类。如下图所示:






