超越原生,PowerBI 柱形图差异分析
最近在使用 Zebra BI 的时候,看见最右侧标记最近两个周期之间的差异的功能还不错,想着能不能在 Power BI 里面复刻一下。于是,本文出现了。
先看一下复刻的效果。
再来感受一下动态效果。
除了标签位置,基本上是复刻成功了,那么这样一个图是如何在 Power BI 中实现的呢?这是用折线和簇状柱形图实现的,让我们一起进入今天的内容吧。
首先,我们要创建一个表,因为最后一列其实是一个空格值。
点击建模,选择新建表,输入下方代码。
这样会得到一个包含月份和空格值的表,再转到表格视图,选中 MonthNameCN 列,选择按列排序。
再新建一个度量值去计算当前月份的销售额。
Sum of Sales =
VAR SumTable =
SUMMARIZE (
FILTER ( '差异类别', [MonthNum] IN TOPN ( 12, VALUES ( 'Dim Calendar'[MonthNum] ), 'Dim Calendar'[MonthNum], 0 )) ,
[MonthNameCN]
)
RETURN
CALCULATE ( [Sales] , 'Dim Calendar'[MonthNameCN] IN SumTable )
这里为什么会用到 Top N,而不是直接筛选 MonthNum 不等于 13 的月份呢?这是考虑到我们可以要对月份进行筛选,所以就直接使用筛选出日期表的前 12 个值,也就是所有月份。当你创建一个切片器对月份进行筛选时,它就会只显示你筛选的月份。
创建一个折线和簇状柱形图,在 X 轴上添加差异类别表的月份列,在列 Y 轴上添加 Sum of Sales 度量,这时是不显示空格类别的。
然后就是两条折线的创建了,一个是等于最后一个月的值,一个是等于倒数第二个月的值,所以我们可以通过 TOPN 结合 SUMX 实现。
Last1MSales =
SUMX (
TOPN ( 1, VALUES ( 'Dim Calendar'[MonthNum] ), 'Dim Calendar'[MonthNum], 0 ),
[Sales]
)
Last2MSales =
SUMX (
TOPN ( 2, VALUES ( 'Dim Calendar'[MonthNum] ), 'Dim Calendar'[MonthNum], 0 ),
[Sales]
) - [Last1MSales]
再去构造第一条线,最后一个月和空格值上的销售额等于最后一个月的销售额。
Line =
VAR Last1M =
TOPN ( 1, VALUES ( 'Dim Calendar'[MonthNum] ), 'Dim Calendar'[MonthNum], 0 )
RETURN
IF (
SELECTEDVALUE ( '差异类别'[MonthNum] ) IN UNION ( Last1M, { 13 } ),
SUMX ( Last1M, [Sales] )
)
然后是第二条线,最后两个月和空格值上的销售额等于倒数第二个月的销售额。
Line2 =
VAR Last1M =
TOPN ( 1, VALUES ( 'Dim Calendar'[MonthNum] ), 'Dim Calendar'[MonthNum], 0 )
VAR Last2M =
TOPN ( 2, VALUES ( 'Dim Calendar'[MonthNum] ), 'Dim Calendar'[MonthNum], 0 )
RETURN
IF (
SELECTEDVALUE ( '差异类别'[MonthNum] ) IN UNION ( Last2M, { 13 } ),
SUMX ( Last2M, [Sales] ) - SUMX ( Last1M, [Sales] )
)
将两条线添加到该视觉对象的行 Y 轴上,再关闭辅助 Y 轴的值。
然后转到视觉对象的误差线选项,将数据系列切换为 Line2,因为其实不管是上升还是下降,箭头都是从 Line2 出发,到 Line 结束。
当增长大于 0 时,Line 2 的上限是 Last1MSales;当增长小于 0 时,Line 2 的下限是 Last1MSales。
创建一个下限度量值。
下限 =
IF (
SELECTEDVALUE ( '差异类别'[MonthNameCN] ) = " ",
IF ( [Last1MSales] - [Last2MSales] < 0, [Last1MSales] )
)
添加到 Line2 的下限上。
修改一下误差线的条形图选项,数据条颜色改为深红色,宽度改为 4,标记形状改为 △,大小改为 8,边框大小改为 0。
再启用误差线的错误标签。
看一下效果。
这只是当增长小于 0 是的差异计算,当增长大于 0 时,又需要一个新的数据系列,将 Line2 的复制一下。
Line Copy = [Line2]
将它也添加到折线和簇状柱形图的行 Y 轴上,然后新建一个表示上限的度量值。
上限 =
IF (
SELECTEDVALUE ( '差异类别'[MonthNameCN] ) = " ",
IF ( [Diff] > 0, [Last1MSales] )
)
再次到误差线选项,将数据系列切换为 Line Copy,在上限上添加上限字段。
按照相同的办法设置一下误差线的条形图选项和错误标签,只不过要注意将颜色改为绿色。
看一下增长时的效果。
最后将视觉对象美化一下,修改一下柱形和折线的颜色,关闭图例和网格线等。
再看一下动态效果。
大家赶快去自己的 Power BI 中试一下吧,如果标签想显示数值,将错误标签的标签格式改为相对(数值)即可。
大家可以对照本文说明自己实验,已经购买《PowerBI进行时2024》的伙伴,也可以在资料中参考直接套用本案例到您的工作中。
↓ 数据分析类近期培训课程 ↓
让数据分析真正成为你的力量
一数据分析师训练营 课程表一
时间:2024年03月 班
主题:《财务分析之道》终极业财融合,高级FP&A。[少量席位🎫]
主题:《经营分析之道》指标驱动企业经营分析。[报名中📩]
主题:《数据分析之道》精通十大业务分析模型。[少量席位🎫]
时间: 2024年04月 班
主题: 《DAX之道》2日精通DAX。 [可报名💡]
咨询老师,验证码:data2024
点击“阅读原文”进入学习中心