Power BI应用:KPI指标动态展示之TOPN及其他


KPI指标动态展示之TOPN及其他

作者:Beau

一、背景故事

2020年第一天上班,B同学还沉浸在跨年的喜悦中,坐在工位上,喝了一口枸杞养生茶,随即打开了电脑,邮箱提醒老板发来一封邮件,顿时心头一紧,不会有重要工作吧,赶紧点开邮件,看着看着,眉头渐舒,原来老板让他对19年所有客户的销售做排名展示,以了解公司头部客户去年销售表现,具体要求为:

1.TOPN中的N值动态可选。
2.除了TOPN中的客户,其余客户销售归为“其他”组显示。
3.显示TOPN和"其他"组的销售占比情况。

B同学此时心中窃喜,这需求貌似在网上看到过现成解决方案,那就简单了,打开度娘,照葫芦画瓢,不到半个小时,B同学就搞定把邮件发出。在钉钉上和同事聊了几句,刚拿起茶杯,邮箱提醒老板邮件又来了,是不是被我的效率震惊了?赶紧点开邮件,邮件大意如下:

1.对完成速度和质量表示认可。

2.对内容有了新的要求:

*对于TOPN客户,不要汇总在一起,要看到客户明细。

*对于KPI指标要实现动态切换,比如销售额,销量,利润等。

3.中午十二点前要给到老板。

B同学此时悲喜交加,新诉求看起来简单,但是对于之前没有过类似实操经验的B同学来说,难度颇大,度娘这次也不好使了,看了一下时间,离十二点还有三个小时,烧香拜佛已然来不及,求人不如求己,B同学放下茶杯,扶了扶眼镜,带上耳塞,点开PBI,开整......

二、制作步骤

1.模型概览

四个维度表(地区,客户,产品,日期)与一个事实表(订单)分别建立一对多的单向筛选关系。其余四个是自建的辅助表。

根据老板的要求,要实现对TOPN的客户明细展示以及KPI指标的动态切换,那么这里需要建立三个辅助表,分别通过新建参数和新建表的方式,具体如下:

参数N(范围1-50,50以后的客户老板也基本不会看了)

KPI类别表(便于实现KPI动态切换)

KPI类别表 =
SELECTCOLUMNS (
{ ("销售额", "1" ),( "销量", "2" ),( "利润额","3" ), ( "利润率", "4" )},
"KPI", [Value1],
"orderby", [Value2]
)

TOPN参数表(包含所有客户姓名+其他,便于后续动态展示)

TOPN参数表 =

VAR customer =

SELECTCOLUMNS ( VALUES ( '客户'[客户名称] ), "TOPN参数", [客户名称] )

VAR others = { "其他"}

RETURN

UNION ( custrom, others )

这个辅助表的建立很重要,是在后续可视化中将客户组与“其他“组同时展示的关键。

2.建立度量值

凉菜上完了,硬菜马上端上桌,需要建立的具体度量值如下所示。

先唠叨几句,

要做好度量值的归类整理和规范命名工作!

要做好度量值的归类整理和规范命名工作!

要做好度量值的归类整理和规范命名工作!

重要的事情说三遍!

否则后期度量多了之后你真的会懵逼!

简单的基础度量就不再花时间赘述了,下面重点对核心度量进行解释说明。

base.kpi.auto =

VAR kpiname =

SELECTEDVALUE ( 'KPI类别表'[KPI] )

RETURN

SWITCH (

kpiname,

"销售额", [base.salse],

"销量", [base.volume],

"利润额", [base.Profit],

"利润率", [base.Profit%]

)

度量本身不难,作用为实现对KPI的动态切换。

rank.kpi =

CALCULATE (

[base.kpi.auto],

TREATAS (VALUES ( 'TOPN参数表'[TOPN参数] ), '客户'[客户名称] )

)

看着也很简单吧,但很重要,从模型关系图中可以看到在这里B同学并没有将TOPN参数表与任何表建立关系,那么该如何实现利用TOPN参数表的字段对KPI指标进行筛选呢?这里我们用到了TREATAS函数,通过共有字段[客户名称]建立虚拟关系连接两表,这也是一种无侵入式的设计思路。

rank.rank =

RANKX ( ALL ( 'TOPN参数表'[TOPN参数] ), [rank.kpi] )

有了rank.kpi度量,那么接下来就是自然的对此度量进行排名。

如果前面介绍的几个度量可以称之为后台度量或基础度量,那么后面我们要介绍的度量便可以称为前端度量或展示度量。

先上效果图:

对上图进行简单分析,有三个列字段,TOPN即之前建立的辅助表TOPN参数表,KPI即为核心指标,还有对KPI排名的RANK字段。

接下来重点讲一下KPI以及RANK字段相关度量值的构建。

KPI字段度量值

view.topn&others =

VAR top_category =

SELECTEDVALUE ( 'TOPN参数表'[TOPN参数] )

VAR N =

TOPN ( [参数N 值], VALUES ( '客户'[客户名称] ), [base.kpi.auto] )

RETURN

SWITCH (

TRUE(),

[rank.rank] <= [参数N 值],[rank.kpi],

top_category = "其他", CALCULATE ([base.kpi.auto], EXCEPT ( ALLSELECTED ( '客户'[客户名称] ), N ) )

)

整体思路是将参数N值和[rank.rank]进行对比,小于等于时显示[rank.kpi],其次当'TOPN参数表'[TOPN参数]=“其他”时,显示除TOPN值以外的客户汇总值,要重点注意函数EXCEPT在这里的使用逻辑,这里作为获取差集来使用。

RANK字段度量值

view.rank =

VAR top_category=

SELECTEDVALUE ( 'TOPN参数表'[TOPN参数] )

RETURN

SWITCH (

TRUE(),

HASONEVALUE ( 'TOPN参数表'[TOPN参数] )

&& [view.topn&others] <> 0

&& [rank.rank] <= [参数N 值], [rank.rank],

HASONEVALUE ( 'TOPN参数表'[TOPN参数] )

&& [view.topn&others] <> 0

&& top_category = "其他", 51

)

回到效果图,能看出对于RANK字段,我们实现了客户KPI的降序排列,同时也将“其他”放在表格底部且不存在RANK值,大家这里会发现要实现这样的效果,通过构建辅助表的常规方式也许可以实现,但是非常复杂。

这里B同学采用了曲线救国的方法,我们给到“其他”一个很大的RANK值,同时将这个值颜色设置成与底色一致,那么就变相的实现了隐藏RANK值的目的。

上面度量中把“其他”的RANK值设置为51就是出于这个目的,当然这个度量里还有一些其他小细节的处理,小伙伴们可以细细品味。

3.制作可视化

做完上面的工作,时间已来到了十一点半,B同学长舒了一口气,还好,核心工作已经完成,下面就剩可视化的展现。

老板要求看到累计占比,首先想到的就是折线和簇状柱形图,加切片器,调位置,上配色。一气呵成,最终效果如下图所示:

这时闹钟响了,还剩最后五分钟,上传,发送,B同学终于赶在12点前将邮件发出。

对着电脑屏幕,B同学陷入了沉思,这是最完美的报告么?老板最终会满意么?切片维度能否加入年,季,月?对于TOPN客户能否进行ABC分析?能否将客户维度扩展到其他维度?是否应该第一次交差就做仔细思考而不是敷衍了事?

茶虽已凉,心却很热,B同学发现能做的还有很多,这仅仅是开始......

三、写在最后

通过本文希望能让大家对(TOPN明细+其他)及KPI指标动态展示有较完整且清晰的了解。

文章有干货也有情怀,在职场中的小伙伴们,是否从B同学的身上依稀看到了当年的自己?希望大家都能在新的一年中,发现关于自己更多未知的可能。

本人能力有限,文中如有不当之处,请各位小伙伴给予批评指正。

最后感谢@佐罗老师的数据源,感谢@采悟老师和@天行老师的不吝指导,他们不间断高质量的输出,使我受益良多,站在巨人的肩膀上,会让我看的更远。

PS:仔细看,图中有亮点,拿到源文件会有更多惊喜哦!

(0)

相关推荐

  • 【mysql 】mysql 获取排列序号

    在进入正题之前先来了解一个mysql中的小知识点: ①   := 与 = 的区别 :=   赋值的意思.在set update select 中表示赋值的意思,用的比较少一般都用=,但是在用变量实现行 ...

  • 【竺】性能测试笔记12——关联

    关联的定义及使用场景    ____ 关联:将服务器提供动态变化的值存放在变量中,当需要使用该变量时,自动从服务器响应的信息中获取该值,并在后面使用的过程中进行替换.(也可能是前端页面动态生成的值) ...

  • 一文学会!10个简单好用Excel公式,原来这么简单!

    100万职场人都在看 后台回复礼包领 199元职场干货 回复"社群"二字,加入微信交流群,共成长 每周有职场礼包送出哟

  • 秩和检验(rank sum test)

    ​秩和检验(rank sum test)又称顺序和检验,它是一种非参数检验(nonparametric test).它不依赖于总体分布的具体形式,应用时可以不考虑被研究对象为何种分布以及分布是否以知, ...

  • Python 3.7中dataclass的终极指南(一)

    from dataclasses import dataclass from typing import List @dataclass class PlayingCard:     rank: st ...

  • Power BI旭日图,轻松展示多层级数据

    展示不同分类的占比情况时,我们经常用到的是饼图,但遇到多层次的数据时,饼图就显得力不从心,不过还有个更强大的"饼图"可以帮助你:旭日图. 旭日图Sunburst Chart,是饼图 ...

  • 利用Power BI计算组,动态切换各种范围的数据标签

    上篇文章介绍了利用计算组动态显示最高点和最低点数据标签的案例,其实还可以进一步展开,利用切片器来动态的展示不同范围的数据标签. 比如设计动态的切换,可以显示全部的数据标签,也可以只显示最高最低点的数据 ...

  • Power BI如何动态展示表?送你两种方法

    日常分析中,我们不仅需要动态的计算一个值,常常还有动态返回表的需求.生成一个表,直接的想到就是利用DAX新建表,但计算表的属性是静态的,它无法与可视化页面上的筛选器交互,所以无法满足动态化的需求. 而 ...

  • Power BI动态查询数据库,以及需要注意的问题

    小勤:现在公司数据库里的数据量很大,怎么才能按需要仅接入自己需要的数据?比如说,按需要输入起始日期,然后仅从数据库里接入该起始日期至今的数据. 大海:你可以设置起始日期为参数,然后在接入数据库时使用的 ...

  • 利用Power BI的按钮和书签,动态切换图表

    PowerBI中的按钮,通过一定的设置,应用于报表或者仪表板中,可以实现更有趣.更丰富的交互方式,本文通过一个实例了解按钮的用法. 前面已介绍了书签的使用,这篇文章,使用书签,并结合按钮的操作,实现图 ...

  • 这些Power BI的动态技巧,你应该掌握

    关于PowerBI的一些动态技巧,之前断断续续分享过一些,不少星友平时可能没有注意到,至少没有全部看过,所以提的不少问题,是关于如何实现某种动态的效果,之前的文章都有所介绍. 所以今天特意整理了一下历 ...

  • Power BI动态技巧:突出显示下跌数据

    在之前的文章中,介绍过一种动态显示高于平均值的做法(一个度量值,完成图表的动态分组和配色),今天再给大家介绍一种动态显示下跌数据的方法. 数据模型与前面文章中的相同,首先按照月份和销售额生成一个柱形图 ...

  • Power BI技巧:时间维度动态折叠显示

    文/Beau 数据分析爱好者,擅长PBI数据分析 本文灵感来自于星球球友的一个求助帖,他的诉求是可以在矩阵中对于日期类型的列标题进行动态折叠显示. 何为折叠呢? 简单的说就是当切片器选择日期长度超过一 ...

  • Power BI轻松制作动态着色地图

    上一篇文章使用PowerBI地图模拟疫情地图以后,有小伙伴后台问,能否利用着色地图,按时间动态展示变化情况呢? 当然是可以的,并且非常简单,下面介绍一下思路. 首先找到每日的地区数据(本文示例为1.2 ...