人生没有彩排
每一天都是现场直播

在PowerBI中实现自适应单位

在数据可视化中,根据数值大小自动调整显示单位(如K、M、B等)是一种常见的需求,它可以使报表更加清晰易读。本篇文章将介绍如何在PowerBI中实现这种自适应单位的方法。

问题描述

计算各产品的总销售额,并进行单位的格式化,将根据数值的大小自适应地显示成合适的单位,并保留一位小数,可用的单位有:个(无单位)、千(K)、万(W)、百万(M)、十亿(B)等。

具体问题如下图所示:

本案例的初始数据如下:

订单表:

日期 产品 销售额
2025年1月1日 A 111000
2025年1月1日 A 800000
2025年1月2日 B 32340
2025年1月2日 C 8600
2025年1月3日 A 610000
2025年1月3日 D 2300
2025年1月4日 B 13001
2025年1月4日 C 1200
2025年1月5日 E 300.36
2025年1月5日 E 220
2025年1月5日 D 310

若需其它辅助表等,可自行创建并建模。

解题要点

关于单位显示与格式化的场景中,大概有以下几种处理方法:

1、使用FORMAT函数:

该方法的自由度最高,可以在数值的末尾随意拼接字符串,因此无论什么单位都可以使用该方法来处理。但也有缺点,那就是返回结果实际上是一个字符串,而不再是数值,因此后续的计算如果要引用该度量值的,那么将不太方便。

2、使用动态数据格式:

该方法略有局限性,当遇到格式字符串无法表达的单位或格式时将不再适用。但优点也很明显,虽然视觉上看到的是带单位的数值文本,但度量值的返回结果本质上仍然是一个数值,它只是稍微给结果化了下妆,并不影响后续的计算引用。

3、动态数据格式+自定义文本:

该方法是与单位相关的所有案例场景中的终极方案,它可以处理任意单位,而且也不影响度量值的后续计算引用。甚至不只是单位的场景,该方法也能应用到很多的场景中。

它借助动态数据格式来给度量值的返回结果化妆,或者说叫整容,因为该方案所返回的格式内容并不是格式字符串,而是一个完全自定义的文本,因此最终视觉呈现出来的内容可能并不代表度量值真正返回的内容,所以也不影响度量值的后续计算引用。

关于该终极方案的更多细节,可以阅读我的另一篇文章:PowerBI自定义数据标签与动态数据格式

解决方案

首先,数据模型如下图所示:


下面给出几种实现自适应单位的方法,具体如下:

方法一:使用FORMAT函数

Format1 = 
VAR val = SUM('订单表'[销售额])
RETURN
SWITCH(
    TRUE(),
    val<1E3, FORMAT(val,"#,##0.0"),           // 个位,无单位
    val<1E4, FORMAT(val/1E3,"#,##0.0K"),      // 千位,显示为K
    val<1E6, FORMAT(val/1E4,"#,##0.0W"),      // 万位,显示为W
    val<1E9, FORMAT(val/1E6,"#,##0.0M"),      // 百万,显示为M
    FORMAT(val/1E9,"#,##0.0B")                // 十亿,显示为B
)

方法二:使用动态数据格式

// Measure
Format2 = SUM('订单表'[销售额])
// Format
VAR val = SELECTEDMEASURE()
RETURN
SWITCH(
    TRUE(),
    val<1E3, "#,##0.0",         // 个位,无单位
    val<1E4, "#,##0,.0K",       // 千位,显示为K
    val<1E6, "#,##0\.0,.W",     // 万位,显示为W
    val<1E9, "#,##0,,.0M",      // 百万,显示为M
    "#,##0,,,.0B"               // 十亿,显示为B
)

其中,动态数据格式的设置如下图所示:

方法三:动态数据格式+自定义文本

// Measure
Format3 = SUM('订单表'[销售额])
// Format
VAR val = SELECTEDMEASURE()
VAR val_Format = 
    SWITCH(
        TRUE(),
        val<1E3, FORMAT(val,"#,##0.0"),           // 个位,无单位
        val<1E4, FORMAT(val/1E3,"#,##0.0K"),      // 千位,显示为K
        val<1E6, FORMAT(val/1E4,"#,##0.0W"),      // 万位,显示为W
        val<1E9, FORMAT(val/1E6,"#,##0.0M"),      // 百万,显示为M
        FORMAT(val/1E9,"#,##0.0B")                // 十亿,显示为B
    )
RETURN
""""&val_Format&""""

最后创建一个矩阵,并将产品字段作为行标签,再将上面的度量值以及销售额字段一起放入矩阵的值字段即可,如下图所示:

总结

以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!

PBI/DAX技术交流群(QQ):344353627

赞(0) 打赏
未经允许不得转载:夕枫 » 在PowerBI中实现自适应单位
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论

觉得文章有用的话就支持一下吧~

感谢您的打赏支持,我将持续输出有价值的内容!

支付宝扫一扫打赏

微信扫一扫打赏