员工在离职分析是企业人力资源管理中的重要环节,通过数据分析可以识别出企业在用人、留人等方面的问题。本篇文章将介绍如何在PowerBI中计算各个月份的在职、入职、离职人数,以及离职率等指标。
问题描述
为更好了解企业人员流动情况,现在需要进行在离职分析,请自行建模计算各个月份的在职、入职、离职人数,以及离职率。
其中:离职率 = 离职人数 / (在职人数+离职人数)
注意:总计部分中,在职人数计算的是最新数据,入离职人数则计算的是汇总数据。
具体问题如下图所示:
本案例的初始数据如下:
人员表:
ID | 姓名 | 入职部门 | 入职日期 | 离职日期 | 转正日期 |
---|---|---|---|---|---|
1003 | 姓名3 | 部门3 | 2018年5月9日 | 2018年10月1日 | 2018年8月7日 |
1004 | 姓名4 | 部门4 | 2018年5月11日 | 2018年9月20日 | 2018年8月8日 |
1005 | 姓名5 | 部门1 | 2018年5月12日 | 2018年8月10日 | |
1006 | 姓名6 | 部门2 | 2018年5月13日 | 2018年8月11日 | |
1007 | 姓名7 | 部门3 | 2018年5月14日 | 2018年8月12日 | |
1008 | 姓名8 | 部门4 | 2018年6月15日 | 2018年9月18日 | 2018年9月13日 |
1009 | 姓名9 | 部门1 | 2018年6月16日 | 2018年9月18日 | 2018年9月14日 |
1010 | 姓名10 | 部门2 | 2018年9月17日 | 2018年10月1日 | |
1011 | 姓名11 | 部门3 | 2018年9月18日 | ||
1012 | 姓名12 | 部门4 | 2018年9月19日 | ||
1013 | 姓名13 | 部门1 | 2018年9月20日 | ||
1014 | 姓名14 | 部门2 | 2018年9月21日 | ||
1015 | 姓名15 | 部门3 | 2018年9月22日 | ||
1016 | 姓名16 | 部门4 | 2018年10月1日 | ||
1017 | 姓名17 | 部门4 | 2018年10月2日 | 2018年10月12日 | |
1018 | 姓名18 | 部门1 | 2018年10月3日 | ||
1019 | 姓名19 | 部门2 | 2018年10月4日 | ||
1020 | 姓名20 | 部门3 | 2018年10月5日 | ||
1021 | 姓名21 | 部门4 | 2018年10月6日 |
若需其它辅助表等,可自行创建并建模。
解题要点
本案例的几个指标的计算逻辑都比较简单,具体如下:
1、在职人数,对于当前统计的月份而言,其入职日期应在月底或之前,且离职日期为空或离职日期晚于当前统计的月份。
2、入职人数,入职日期处于当前统计的月份中。
3、离职人数,离职日期处于当前统计的月份中。
4、离职率,等于:离职人数 / (在职人数+离职人数)
解决方案
首先创建一个日期表,并与人员表创建一对多关系,数据模型如下图所示:
然后,创建如下度量值:
在职人数 =
VAR MaxDate = LASTDATE('日期表'[Date])
RETURN
CALCULATE(
DISTINCTCOUNT('人员表'[ID]),
'日期表'[Date]<=MaxDate,
'人员表'[离职日期]=BLANK() || '人员表'[离职日期]>MaxDate
)
入职人数 = DISTINCTCOUNT('人员表'[ID])
离职人数 =
CALCULATE(
DISTINCTCOUNT('人员表'[ID]),
TREATAS(VALUES('日期表'[Date]),'人员表'[离职日期]),
ALL('日期表')
)
离职率 = DIVIDE([离职人数],[在职人数]+[离职人数])
然后创建一个矩阵,并将月份作为行标签,再将上面的度量值放入矩阵的值字段即可,结果如下图所示:
其他方案
以下解决方案精选自技术交流群中的其他小伙伴,希望他们的独到见解和解决思路能够为大家提供更多启发,内容已征得同意,特此分享出来供大家参考和借鉴。
该方案来自小伙伴:“林深见鹿”,通过拆解表结构,构建数据模型,有效简化了表达式的书写逻辑,体现出了数据模型的价值。
总结
以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!
PBI/DAX技术交流群(QQ):344353627