准确计算项目人员投入时间是成本控制、资源分配和项目进度管理的基础,本篇文章将介绍如何在PowerBI中实现这一指标的计算。
问题描述
某公司采用人天来衡量项目的投入,一人天等于八小时,该公司记录了所有人员在每个项目里的投入时间段与投入占比,现在需要计算各个项目在每一年的总投入人天,请自行建模完成计算。
注意:其中的投入占比代表员工在对应时间段内的每一天的工作时长占比,一天的标准工时为八小时,不考虑周末与节假日等的影响。
具体问题如下图所示:
本案例的初始数据如下:
项目投入表:
人员 | 项目 | 开始日期 | 结束日期 | 投入比例 |
---|---|---|---|---|
张三 | 项目A | 2023年1月1日 | 2023年3月31日 | 50% |
李四 | 项目A | 2023年2月15日 | 2023年4月30日 | 80% |
王五 | 项目B | 2023年3月1日 | 2023年5月15日 | 100% |
赵六 | 项目C | 2023年4月10日 | 2023年6月20日 | 60% |
陈七 | 项目D | 2023年5月1日 | 2023年7月31日 | 75% |
张三 | 项目B | 2023年4月1日 | 2023年6月30日 | 30% |
李四 | 项目C | 2023年3月15日 | 2023年5月31日 | 100% |
王五 | 项目A | 2023年2月1日 | 2023年4月15日 | 40% |
赵六 | 项目D | 2023年6月1日 | 2023年8月31日 | 90% |
陈七 | 项目E | 2023年7月1日 | 2023年9月30日 | 50% |
张三 | 项目C | 2023年5月15日 | 2023年7月15日 | 70% |
李四 | 项目E | 2023年8月1日 | 2023年10月31日 | 85% |
王五 | 项目D | 2023年9月1日 | 2023年11月30日 | 100% |
赵六 | 项目B | 2023年10月1日 | 2023年12月31日 | 60% |
陈七 | 项目A | 2023年11月1日 | 2024年1月31日 | 80% |
张三 | 项目E | 2023年12月1日 | 2024年2月28日 | 40% |
李四 | 项目D | 2024年1月15日 | 2024年3月15日 | 100% |
王五 | 项目C | 2024年2月1日 | 2024年4月30日 | 55% |
赵六 | 项目E | 2024年3月1日 | 2024年5月31日 | 70% |
陈七 | 项目B | 2024年4月1日 | 2024年6月30日 | 90% |
若需其它辅助表等,可自行创建并建模。
解题要点
本案例的难点在于项目投入时间段的处理上,而这有两种处理方法:
1、通过GENERATE
函数与CALENDAR
函数将其在度量值中转换成单列日期,然后再与日期表的可见日期进行筛选过滤。
2、在导入数据到PowerBI之前,可在PowerQuery或其他工具中事先将项目投入的时间段转换成单列日期,然后再与日期表建立关系来实现筛选。
如果是在实际的工作场景中,推荐使用第二种方法,该方法通过创建数据模型,可以有效简化度量值的书写。
解决方案
方法一:
首先创建一个日期表,并且不需要与事实表连接关系,具体数据模型如下图所示:
然后,创建如下度量值:
投入人天 =
SUMX(
FILTER(
GENERATE('项目投入',CALENDAR('项目投入'[开始日期],'项目投入'[结束日期])),
[Date] IN VALUES('日期表'[Date])
),
'项目投入'[投入比例]
)
最后创建一个矩阵,将项目字段作为行标签,将年份字段作为列标签,再将上面的度量值放入矩阵的值字段即可,如下图所示:
方法二:
首先在PowerQuery中添加一个自定义步骤,将时间段转换成单列日期,如下图所示:
然后将处理好的事实表加载到PowerBI,并创建一个日期表与其连接关系,如下图所示:
然后,创建如下度量值:
投入人天 = SUM('项目投入'[投入比例])
最后创建一个矩阵,将项目字段作为行标签,将年份字段作为列标签,再将上面的度量值放入矩阵的值字段即可,如下图所示:
总结
以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!
PBI/DAX技术交流群(QQ):344353627