PowerBI自动切换中英文单位

23

除了干饭,皆无向往;被窝之外,皆是他乡

通常我们在做报表的时候,会给报表设置一个统一的单位,比如百万,这样整个报表的数据看起来就比较规整,但是这样也会出现另一个问题,比如某个值是100,那这样格式化后显示就是0,但事实上它并不是0,只是值相对比较小而已。那有没有一个方法可以根据数值的大小自动来显示单位呢?

答案是肯定的,也正是很多人想到的那样,用计算组。

先来回顾下,在计算组出来之前我们是怎么来切换报表的单位的。首先会新建一张单位表

Unit = 
SELECTCOLUMNS(
{
    ( "None" , 1 ) , 
    ( "K" , 1000 ) , 
    ( "W" , 10000 ) ,
    ( "M" , 1000000)
} , "Name" , [Value1] , "Value" , [Value2] )

新建度量如下:

Sales Amount := SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )

Sales Amount Unit = [Sales Amount] / SELECTEDVALUE( 'Unit'[Value], 1 )

图表显示效果如下:

可以看到数据已经显示了根据选择的单位进行了格式化显示,但是这样会存在一个问题,比如我们导出数据,那么导出的数据也是除以10000后的,但是文件中并没有标注该值的单位,这有可能引起不必要的问题。

接下来就是今天的重点了,使用计算组来对数值的显示进行格式化,打开Tabular Editor,右键新建一个计算组

效果如下:

导出数据效果如下,数据还是未格式化前的样子。

再来看上面计算组中的格式表达的写法,其实原理也很简单,用到了自定义格式字符,具体可见官方文档

https://docs.microsoft.com/zh-cn/dax/format-function-dax
  • (,)千分位符

  • (.)小数点占位符

  • (#)占位符,有值时才显示

  • (0)占位符,有值时显示该值,无值时显示为0

VAR V = SELECTEDMEASURE ()
VAR F =
IF(
    SWITCH (
        TRUE (),
        V >= 1E9, "##0,,,.00 G",
        V >= 1E6, "##0,,.00 M",
        V >= 1E3, "##0,.00 K",
        "0.00"
    )
)
RETURN
    F

上面代码无论数值是否带有小数,都会保留两位小数,若要自适应当数值是整数时显示为整数,有小数位时才保留小数,可修改为如下:

VAR V = SELECTEDMEASURE ()
VAR F =
    SWITCH (
        TRUE (),
        V >= 1E9, "##0,,,.## G",  
        V >= 1E6, "##0,,.## M",
        V >= 1E3, "##0,.## K",   
        "0.##"
    )
RETURN
    F

这时,我们可以做进一步的变形,从而做到单位进行中英文的的切换。

这时,也许有人会问,如果有是百分比的度量呢,接下来进一步改进格式表达式

VAR V = SELECTEDMEASURE ()
VAR F =
IF(
    SEARCH( "%", SELECTEDMEASURENAME(), 1, 0) = 0,
    SWITCH (
        TRUE (),
        V >= 1E9, "##0,,,.00 G",
        V >= 1E6, "##0,,.00 M",
        V >= 1E3, "##0,.00 K",
        "0.00"
    ),
    "0.00%"
)
RETURN
    F



本篇文章来源于微信公众号: PowerBI木小桼

类似文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注