PowerBI自动切换中英文单位
通常我们在做报表的时候,会给报表设置一个统一的单位,比如百万,这样整个报表的数据看起来就比较规整,但是这样也会出现另一个问题,比如某个值是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木小桼