​本文来自星友Beau的分享,在进行数据指标的展现时,对关键的少数单独展示,而对剩余的大多数折叠为其他项,是一个很常用的做法。Beau同学通过一个日常的办公场景,详细介绍了PowerBI实现的步骤,值得大家借鉴。

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.模型概览

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

2.构造辅助表

根据老板的诉求,要实现对TOPN的客户明细显示以及KPI指标的切换,那么这里需要建立三个辅助表,具体如下:

参数N(范围1-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 )

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

3.建立度量值

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

先唠叨几句,对于度量值要做好归类整理和规范命名工作,否则后期度量多了之后你真的会懵逼(关于度量值的归类整理可参考:利用这3个步骤,轻松管理你的度量值

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

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就是出于这个目的。

4.制作可视化

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

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

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

对着电脑屏幕,B同学陷入了沉思,切片维度能否加入年,季,月?对于TOPN客户能否进行ABC分析?能否将客户维度扩展到其他维度?是否应该第一次交差就做仔细思考而不是敷衍了事?茶虽已凉,心却很热,B同学发现能做的还有很多,这仅仅是开始......

三、写在最后

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

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

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

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

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

数据可视化之powerBI技巧(一)PowerBI可视化技巧:KPI指标动态展示之TOPN及其他的更多相关文章

  1. 数据可视化之powerBI技巧(十八)Power BI动态技巧:动态显示列和度量值

    今天分享一个可视化小技巧,如何在PowerBI的表格中动态显示需要的列? 就是这样的效果, 也就是根据切片器的筛选,来显示需要的列,做起来很简单,步骤如下: 01 逆透视表 进入Powerquery编 ...

  2. PowerBI 实现不同角色看到内容不同支持动态权限管理

    首先,在PowerBIDesktop中进行设计,先设计一个权限表: 具体权限如下: 也就是说,这些用户账号在PowerBIService登录时,会分别代表这些用户,接下来会使用一个很重要的动态函数:U ...

  3. CNN可视化技术总结(四)--可视化工具与项目

    CNN可视化技术总结(一)-特征图可视化 CNN可视化技术总结(二)--卷积核可视化 CNN可视化技术总结(三)--类可视化 导言: 前面介绍了可视化的三种方法--特征图可视化,卷积核可视化,类可视化 ...

  4. 利用 Flask 动态展示 Pyecharts 图表数据的几种方法

    本文将介绍如何在 web 框架 Flask 中使用可视化工具 pyecharts, 看完本教程你将掌握几种动态展示可视化数据的方法,不会的话你来找我呀- Flask 模板渲染 1. 新建一个项目fla ...

  5. 微信小程序结合后台数据管理实现商品数据的动态展示、维护

    微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,本篇随笔介绍微信小程序结合后台数据管理实现商品数据的动态展示.维护,介绍如何实现商品数据在后台管理系统中的维护管理,并通 ...

  6. 数据可视化之powerBI技巧(十六)采悟:PowerBI作图技巧:动态显示可视化标题

    默认情况下,PowerBI图表的标题是静态的,为了增强图表的可读性,通过设置动态标题,可快速展示关键信息.提升沟通效率.本文通过两个简单的例子来看看PowerBI中如何创建动态标题. /01/ 拿之前 ...

  7. PoPo数据可视化周刊第3期 - 台风可视化

    9月台风席卷全球,本刊特别选取台风最佳可视化案例,数据可视化应用功力最深厚者,当属纽约时报,而传播效果最佳的是The Weather Channel关于Florence的视频预报,运用了数据可视化.可 ...

  8. seaborn 数据可视化(一)连续型变量可视化

    一.综述 Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,图像也更加美观,本文基于seaborn官方API还有自己的一些理解.   1.1.样式控制: ...

  9. 用Python玩转数据第六周——高级数据处理与可视化

    1.matplotlib中有两个模块,pyplot和pylab import matplotlib.pyplot as plt  ///plt.plot(x,y) import pylab as pl ...

随机推荐

  1. RabbitMQ系列之【启动过程中遇到问题及解决方案】

    1.如果显示找不到主机,请在hosts文件中添加: vi /etc/hosts 127.0.0.1 localhost 2.从3.3.1版本开始,RabbitMQ默认不允许远程ip登录,即只能使用lo ...

  2. 通过数据库客户端界面工具DBeaver连接Hive

    前言 本文讲解如何通过数据库客户端界面工具DBeaver连接hive,并解决驱动下载不下来的问题. 1.为什么使用客户端界面工具 为什么使用客户端界面工具而不用命令行使用hive 通过界面工具查看分析 ...

  3. vue-drag-resize 可拖拽可缩放的标签,如何管理多个拖拽元素之间的zIndex?操作上需要保持当前激活的组件是最上层,但是在总体上,又要确保其图层管理的顺序。

    麻烦总是不断出现,还好办法总比困难多, 1.公司开发一款可视化编辑html网页的多媒体编辑平台,牵扯到标签元素的拖拽,缩放,我找了找方法发现原生技术实现起来代码太多,麻烦,还好找到了一个vue组件,可 ...

  4. opencv C++全局直方图均衡化

    cv::Mat histogramEqualization(cv::Mat img){ int rows=img.rows; int cols=img.cols; cv::Mat grayScale= ...

  5. JavaWeb网上图书商城完整项目--12.项目所需jquery函数介绍之ajax

    jquery中使用ajax发送异步请求 下面的一个案例在input输入框失去焦点的时候发送一个异步的请求: 我们来看程序的案例: 这里要强调的是返回值最好选择是json,json对应的就是对象,Jav ...

  6. JavaWeb网上图书商城完整项目--day02-28.查询所有分类功能之left页面使用Q6MenuBar组件显示手风琴式下拉菜单

    首先页面去加载的时候,会去加载main.js文件,我们在加载left.jsp.top.jsp body.jsp,现在我们修改main.jsp的代码,让它去请求的时候去访问的是不在直接去访问left.j ...

  7. 基于层级表达的高效网络搜索方法 | ICLR 2018

    论文基于层级表达提出高效的进化算法来进行神经网络结构搜索,通过层层堆叠来构建强大的卷积结构.论文的搜索方法简单,从实验结果看来,达到很不错的准确率,值得学习   来源:[晓飞的算法工程笔记] 公众号 ...

  8. MySQL 合并查询,以map或对象的形式返回

    转载 CSDN博主「小林子林子」 -> https://blog.csdn.net/qq_26106607/article/details/84961254 原始SQL-> 目的-> ...

  9. 一文告诉你Linux如何配置KVM虚拟化--安装篇

    KVM全称"Kernel-based Virtual Machine",即基于内核的虚拟机,在linux内启用kvm需要硬件,内核和软件(qemu)支持,这篇文章教你如何配置并安装 ...

  10. Laravel 如何在blade文件中使用Vue组件

    Laravel 如何在blade文件中使用Vue组件 1. 安装laravel/ui依赖包 composer require laravel/ui 2.生成vue基本脚手架 php artisan u ...