语法作用
将表达式的值自动格式化成合适的单位(无单位,K:千,M:百万,B:十亿),isFormat参数用于声明该函数是否用于度量值的动态格式化表达式中,该函数根据使用位置进行了适配,1:用于动态格式化表达式,0:用于普通度量值等表达式(将以文本类型返回格式化后的值)。
XF.Analysis.AutoUnit(expression:scalar,isFormat:int64)
函数代码
该函数的实现代码如下:
/// 将表达式的值自动格式化成合适的单位(无单位,K:千,M:百万,B:十亿),isFormat参数用于声明该函数是否用于度量值的动态格式化表达式中,该函数根据使用位置进行了适配,1:用于动态格式化表达式,0:用于普通度量值等表达式(将以文本类型返回格式化后的值)
FUNCTION XF.Analysis.AutoUnit = (expression:scalar,isFormat:int64) =>
IF(NOT isFormat IN {0,1},
ERROR("isFormat参数的可选取值仅为0或1"),
VAR Val = expression
VAR ValFormat =
SWITCH(
TRUE(),
ABS(val)<1E3,FORMAT(val,"#,##0.0"), // 个位,无单位
ABS(val)<1E6,FORMAT(val/1E3,"#,##0.0K"), // 千位,显示为K
ABS(val)<1E9,FORMAT(val/1E6,"#,##0.0M"), // 百万,显示为M
FORMAT(val/1E9,"#,##0.0B") // 十亿,显示为B
)
RETURN
IF(isFormat=1,
""""&ValFormat&""";"""&ValFormat&"""",
ValFormat
)
)
应用示例
计算销售额,并自动格式化成合适的单位。
XF.Analysis.AutoUnit(SUM('订单'[销售额]),0)
结果如下图所示:

以上是isFormat参数设为0时的结果,即以文本类型返回格式化后的值,因此度量值不可再用于后续的数学运算,如下图所示:

如果后续还要引用该格式化单位后的度量值,那么推荐将isFormat参数设为1,并将该函数用于度量值的动态格式化表达式中,这样就不会影响其后续计算。如下图所示:

上图场景中用到的各表达式如下:
销售额-AutoUnit = SUM('订单'[销售额]) // 度量值表达式
销售额-AutoUnit = XF.Analysis.AutoUnit(SELECTEDMEASURE(),1) // 动态格式化表达式
销售额 + 1000000 = [销售额-AutoUnit] + 1000000
注意,isFormat参数设为1时,不要将其用在度量值表达式中,只能用在动态格式化表达式中。





