前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全网首发:PowerBI 原生瀑布图终极解决方案

全网首发:PowerBI 原生瀑布图终极解决方案

作者头像
BI佐罗
发布2021-03-25 11:30:08
3.2K1
发布2021-03-25 11:30:08
举报
文章被收录于专栏:PowerBI战友联盟

瀑布图,在分析中是非常重要的图。在 Power BI 中的原生瀑布图使用起来有些问题,本文来探讨如果基于原生瀑布图的高级使用方法和限制。

默认表现

在 Power BI 中的瀑布图的默认表现是这样的,如果设置:

则表现为:

这个表现可以理解。

再尝试另一种设置:

这里的更改是:加入了细目。什么意思呢?不要紧,看看表现再说,如下:

可以看出来:

  • 每个类别形成了对比,类别是立地的柱子。
  • 每个细目是类别之间对比的项目。
  • 细目的排序是按照差异从正数的大到负数的小来排列的,无法自定义。

这三条规律一定要记住,这是原生瀑布图不改变的内部逻辑,我们要改进瀑布图的表现时,也必须满足这个逻辑,不然无法与之适应。

再考虑一下不加入细目的情况,再看一次:

可以看出来:

  • 每个类别形成积累效应
  • 可以自定义顺序(图表右上角可设置)
  • 总计柱子默认生成

规律总结

可以再做一些实验,就能得到以下重要规律:

  • 【第一类规律】如果不放入细目,类别作为积累项,立地柱子默认生成
    • 类别可以自定义顺序
    • 立地柱子默认生成,文本不可改
  • 【第二类规律】如果放入细目,类别将成为对比项,且立地成柱
    • 类别可以自定义顺序
    • 类别作为立地柱子
    • 细目作为差异积累项,按大小排列,顺序不可改

这两类规律非常重要。

业务诉求

现在我们提出业务上的表现诉求,再来想办法看看上述规律是否可以来满足,要求如下:

  • 有首尾两个立地柱子,表示开始和结束
  • 立地柱子可以自定义名字以及这两个柱子的顺序
  • 内部的绿色或红色差异项表示差异积累
  • 差异项可以自定义顺序

如果用 Zebra BI 的瀑布图来实现这个诉求,其效果大致如下:

Zebra BI 是可以直接在界面设置柱子的正负以及是否立地的,而且非常简单,这有利于我们理解瀑布图最轻松的设置方式。而 Power BI 原生的瀑布图是做不到的。

通过与规律对比,我们发现有一条是一定做不到的,那就是:

差异项可以自定义顺序

这点是原生瀑布图做不到的。

那么,我们就得到了一个结论:

如果不考虑差异项可以自定义顺序的场景,是可以用原生 Power BI 瀑布图做出的。

下面给出终极方案,该方案是全网首发滴。

终极方案

通过上述研究,按照规律我们可以做出设计了。先来看一个效果:

没有错,这正是我们需要的。这里的业务场景是:

  • 用去年和今年分别作为瀑布图的首柱和末柱
  • 来对首柱到末柱是如何变化的按照差异项来对比
  • 中间是每个差异项
  • 差异项的贡献从大到小排序

注意:差异项是无法自定义排序的。

差异项无法自定义排序而是默认排序,是原生瀑布图的最大限制。

假设我们接受这个限制,那么设计这样的瀑布图的通用方法是什么呢。如下给出。

第一步:DAX 自定义首末类别柱

用 DAX 自定义首末类别柱如下:

代码语言:javascript
复制
// 定义计算表如下
Waterfall-Begin-End-ACPY = 
SELECTCOLUMNS(
{
    ( 1 , "Start" , "去年" ) ,
    ( 2 , "End" , "今年" )
} , 
"OrderBy" , [Value1] , "PointCode" , [Value2] , "PointName" , [Value3] )

这个用来作为首末端点。

第二步:DAX 自定义差异细项

用 DAX 自定义差异细项如下:

代码语言:javascript
复制
Waterfall-Body-ByIndustry = 
DISTINCT( Customer[Industry] )

这个用来作为首末端点之间的内容。

第三步:DAX 自定义度量值

这是最精妙的一步,这里存在一个非常非常重要的技巧,我们先来看 DAX 实现,如下:

代码语言:javascript
复制
Waterfall.Value.ByIndustry = 
VAR vPoint = SELECTEDVALUE( 'Waterfall-Begin-End-ACPY'[PointCode] )
VAR vItem  = SELECTEDVALUE( 'Waterfall-Body-ByIndustry'[Industry] )
RETURN
SWITCH( TRUE() ,
    vPoint = "Start" && vItem <> BLANK() , CALCULATE( [KPI.PY] , TREATAS( { vItem } , 'Customer'[Industry] ) ) ,
    vPoint = "End" && vItem <> BLANK() , CALCULATE( [KPI] , TREATAS( { vItem } , 'Customer'[Industry] ) ) ,
    vPoint = "Start" , [KPI.PY],
    vPoint = "End"   , [KPI]
)

这里蕴含了一个技巧非常重要,我们不细细拆解这个技巧的原理,我们将其规律描述如下:

  • 用 SWITCH TRUE 结构做判断框架
  • 对首柱与差异项的穷举组合,计算,视为 A
  • 对末柱与差异项的穷举组合,计算,视为 B
  • 则:B - A 是差异项的值
  • 再对首柱和末柱分别计算

这套规律非常重要,这恰好是 Power BI 瀑布图内部在对比计算时依照的规律。

作图如下

有了上述三步,我们就可以作图如下:

则可以得到效果:

非常好。

不完美的地方

我们刚说明了限制:差异项无法自定义排序而是默认排序,是原生瀑布图的最大限制。

这在做以时间维度做差异项的时候就有些不完美,如下:

它的差异项并非是按照月份来排序的,而是按照贡献度来排序的。

也就是说:

Power BI 的原生瀑布图在设计的时候就是考虑到它对贡献度的分析。

总结

本文彻底给出了 Power BI 中原生瀑布图的行图规律以及如何利用这些规律制作高级瀑布图以及其适用范围。

结论是:

  • 可以完美支持以贡献度分析为主的瀑布结构
  • 不能支持按照自定义细项排序的瀑布结构

对于此规律和结构的了解非常重要,它将回答什么图可以做,什么图不可以做,那对于不完美怎么办呢?答案是推荐使用 Zebra BI 来解决即可。

你可以复制粘贴本文 DAX 直接使用或者系统化学习《BI真经》。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI战友联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 默认表现
  • 规律总结
  • 业务诉求
  • 终极方案
  • 第一步:DAX 自定义首末类别柱
  • 第二步:DAX 自定义差异细项
  • 第三步:DAX 自定义度量值
  • 作图如下
  • 不完美的地方
  • 总结
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档