之前碰到多次星友提出类似这样的问题:展示预算和实际数据时,如果是已经发生的月份就显示实际数据,未发生的月份显示预算数据,并用不同的颜色区分,这应该怎么做呢?

 

接着前面关于预算分析文章的介绍,如果直接把实际和预算数据放到簇状柱形图中,效果是这样的:

 

Power BI可视化技巧:柱形图动态显示预算实际_Power BI

 

现在打算实现的效果是,已经发生完整业务的月份就只显示实际数,未发生业务的月份只显示预算数。

 

比如在这个案例中,完整的业务月份是到9月份,如何让1-9月显示实际数据,而第四季度的三个月显示预算数据呢?并且用不同的颜色表示预算和实际数据。

 

可以构建两个度量值来实现:

 

收入 实际 = IF( MAX( '日期表'[日期] )<= [最新业务日期] , [收入] )收入 预算 = IF( MAX( '日期表'[日期] ) > [最新业务日期] , [收入 预算分配] )

 

这两个度量值都是利用当前上下文的最大日期与[最新业务日期]比较,[收入 实际]度量值的判断逻辑是,如果是已发生业务的完整月份,显示实际数,否则返回空值;而度量值[收入 预算]的逻辑正好相反。

 

对于不完整的业务月份,在这个柱形图中,上下文是月份,MAX返回当月的最后一天,只要 [最新业务日期]不是最后一天,当月就不完整,只有[收入 预算]会返回预算数据。

 

利用这两个度量值生成堆积柱形图,就是目标效果:

 

Power BI可视化技巧:柱形图动态显示预算实际_Power BI_02

 

当10月业务发生完以后,该柱形图会自动将10月份的数据变更为实际数据,并用橙色显示。

 

更进一步的,还可以创建一个月份参数,将上下文的月份直接与参数比较,来动态显示任意一个月份分割的实际和预算数据。

 

 

 

关于如何建参数不再介绍,如果不熟悉你可以参考这篇文章来了解:创建PowerBI「参数」轻松搞定动态分析,这里直接用建好的参数来修改上述度量值:

 

 

收入 实际 = 

IF(MONTH(MAX('日期表'[日期]))<=[月份 值],[收入])

收入 预算= 

IF( MONTH(MAX('日期表'[日期]))>[月份 值],[收入 预算分配])

 

然后利用参数切片器就可以进行动态切换:

 

Power BI可视化技巧:柱形图动态显示预算实际_Power BI_03

 

甚至可以用个播放器来自动循环展现实际和预算数据的变化:

 

Power BI可视化技巧:柱形图动态显示预算实际_Power BI_04

 

当然这里这样做并没有太大意义,主要想要表达的是,这种技巧并不只是适用于预算分析,当你有类似的动态展现需求时,都可以参考这种思路来实现。