Power BI预算分析:预算目标分解
数据有对比才有意义,其中一个比较的维度是与预算目标对比,也就是常说的预算分析。PowerBI的日常工作应用场景有一类就是预算分析,最近就分享一些预算分析的相关内容。
其中一个经常碰到的问题是,预算目标如何分解?因为预算目标一般是年或者按月下达的,但是需要按更细的维度来跟踪,比如每日对比分析,如何把月度目标分解为每日的预算目标呢?
在这个销售分析模型示例中,增加个预算表:
其中预算表的结构是这样的:
只有每个月度的预算目标额,如何把这个月度目标平均分解到每一天呢?
这里有个年度月份的维度,不少人直接拿这一列直接与日期表的年度月份列建立关系,但这样做对于需要的结果并没有什么帮助。
这个小需求有很多解决方案,这里给出一个不需要建立关系,只用一个度量值就可以完成的方案。
先建立基础度量值:
实际收入 = SUM( '订单表'[销售额] ) 预算目标 = SUM( '预算'[销售预算] )
预算分解度量值如下:
这个度量值的主要逻辑是,先通过几个变量获取当前上下文的天数、当前月份的天数、当前月份的预算,结果返回当前天数占当月天数的比例,来分解当月的目标。
其中获取当月的预算时,因为没有建立关系,用了TREATAS来构建虚拟关系,通过当前上下文来获取预算表中的预算目标。
并且结果只对上下文是日期或者月份时执行该计算,如果上下文是日期,当月天数是31天,该度量值就会返回当月目标的1/31,比如1月的每日预算是1月目标的1/31,2月每日预算是2月目标的1/29:
如果上下文是月份和日期,也会返回按照该月的天数占当月总天数的比例来计算预算额:
这个结果还有一个小问题是,没有合计数,并且如果上下文是季度或者年度,也没法计算出结果,那么如何修正呢?
关于总计修正的问题,之前介绍过,参考:Power BI 总计错误的终极解决方案(二),这里也可以直接套用:
预算 分配 =
SUMX( VALUES( '日期表'[日期] ) , [预算 分解] )
结果如下:
这样无论在哪个粒度上,预算都能正确分配,可以方便地与实际数据进行同口径比较。