
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中使用计算组来自动根据数值大小切换显示单位,避免值被误解。通过Tabular Editor创建计算组,并利用自定义格式字符实现数值格式化。内容还涉及了数据导出时的格式保持以及如何实现单位的中英文切换,适用于需要动态单位显示的报表场景。
1759

被折叠的 条评论
为什么被折叠?



