Power BI可视化技巧:柱形图动态显示预算实际
之前碰到多次星友提出类似这样的问题:展示预算和实际数据时,如果是已经发生的月份就显示实际数据,未发生的月份显示预算数据,并用不同的颜色区分,这应该怎么做呢?
接着前面关于预算分析文章的介绍,如果直接把实际和预算数据放到簇状柱形图中,效果是这样的:
![](http://n4.ikafan.com/assetsj/blank.gif)
现在打算实现的效果是,已经发生完整业务的月份就只显示实际数,未发生业务的月份只显示预算数。
比如在这个案例中,完整的业务月份是到9月份,如何让1-9月显示实际数据,而第四季度的三个月显示预算数据呢?并且用不同的颜色表示预算和实际数据。
可以构建两个度量值来实现:
收入 实际 = IF( MAX( '日期表'[日期] )<= [最新业务日期] , [收入] ) 收入 预算 = IF( MAX( '日期表'[日期] ) > [最新业务日期] , [收入 预算分配] )
这两个度量值都是利用当前上下文的最大日期与[最新业务日期]比较,[收入 实际]度量值的判断逻辑是,如果是已发生业务的完整月份,显示实际数,否则返回空值;而度量值[收入 预算]的逻辑正好相反。
对于不完整的业务月份,在这个柱形图中,上下文是月份,MAX返回当月的最后一天,只要 [最新业务日期]不是最后一天,当月就不完整,只有[收入 预算]会返回预算数据。
利用这两个度量值生成堆积柱形图,就是目标效果:
![](http://n4.ikafan.com/assetsj/blank.gif)
当10月业务发生完以后,该柱形图会自动将10月份的数据变更为实际数据,并用橙色显示。
更进一步的,还可以创建一个月份参数,将上下文的月份直接与参数比较,来动态显示任意一个月份分割的实际和预算数据。
关于如何建参数不再介绍,如果不熟悉你可以参考这篇文章来了解:创建PowerBI「参数」轻松搞定动态分析,这里直接用建好的参数来修改上述度量值:
收入 实际 =
IF(MONTH(MAX('日期表'[日期]))<=[月份 值],[收入])
收入 预算=
IF( MONTH(MAX('日期表'[日期]))>[月份 值],[收入 预算分配])
然后利用参数切片器就可以进行动态切换:
![](http://n4.ikafan.com/assetsj/blank.gif)
甚至可以用个播放器来自动循环展现实际和预算数据的变化:
![](http://n4.ikafan.com/assetsj/blank.gif)
当然这里这样做并没有太大意义,主要想要表达的是,这种技巧并不只是适用于预算分析,当你有类似的动态展现需求时,都可以参考这种思路来实现。