对比销售目标与实际完成情况是一项基础但至关重要的任务,本篇文章将介绍如何在PowerBI中按版本分月展示销售目标与实际值。
问题描述
现有不同版本的计划,制定了不同月份应该要达到的销售目标。现在需要计算各个月份的销售额,要求如下,请自行建模完成计算。
1、若某一月份早于当前版本中指定的最早计划月份,则显示该月的实际销售额;
2、若该月份等于或晚于当前版本的最早计划月份,则显示该月对应的计划值(如该月无计划值,则用过去最近月份的计划值)。
具体问题如下图所示:
本案例的初始数据如下:
计划表:
版本 | 年月 | Sales |
---|---|---|
V1 | 202507 | 10 |
V1 | 202508 | 20 |
V1 | 202509 | 30 |
V1 | 202510 | 40 |
V1 | 202511 | 50 |
V1 | 202512 | 60 |
V2 | 202508 | 70 |
V2 | 202509 | 80 |
V2 | 202510 | 90 |
V3 | 202503 | 100 |
V3 | 202504 | 110 |
实际表:
年月 | Sales |
---|---|
202501 | 21 |
202502 | 44 |
202503 | 67 |
202504 | 57 |
202505 | 130 |
202506 | 198 |
202507 | 76 |
202508 | 34 |
202509 | 130 |
202510 | 69 |
202511 | 141 |
202512 | 125 |
若需其它辅助表等,可自行创建并建模。
解题要点
本案例较简单,先获取当前版本的最小月份,然后判断当前月份是否小于该最小月份,进行分类处理即可。然后,在获取最近的计划销售目标时,可以先筛选出过去的计划数据,然后使用TOPN等函数来获取最后一个月的即可。
解决方案
首先,数据模型如下图所示:
然后,创建如下度量值:
Mix Sales =
SUMX(
VALUES('实际表'[年月]),
IF('实际表'[年月]<MIN('计划表'[年月]),
CALCULATE(SUM('实际表'[Sales])),
CALCULATE(
MAXX(TOPN(1,'计划表','计划表'[年月]),'计划表'[Sales]),
'计划表'[年月]<=EARLIER('实际表'[年月])
)
)
)
然后创建一个矩阵,并将实际表中的年月字段作为行标签,计划表中的版本字段作为列标签,再将上面的度量值放入矩阵的值字段即可,如下图所示:
总结
以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!
PBI/DAX技术交流群(QQ):344353627