人力资源案例
人员结构数据加载
- 加载员工信息表
人员结构模型设计
- 新建日期表:
日期表 = CALENDARAUTO()
- 将Date列改为日期,格式设为yyyy-mm-dd
- 日期表新建年、月、季度3列:
函数说明:年 = YEAR('日期表'[日期]) 月 = MONTH('日期表'[日期]) 季度 = "Q"&FORMAT('日期表'[日期],"Q")
YEAR(date),返回日期的年份,1900 到 9999 之间的四位整数 MONTH(date),以数字形式返回月份值,1(一月)到 12(十二月)之间的数字 FORMAT(value, format_string),根据所指定的格式将值转换为文本,Q代表季度,前面的
"Q"&
表示字符串拼接 - 去除日期表和员工信息表的所有关系,本例的日期表仅用于条件限制,所以不需要做关联
- 新建度量值,计算期末在职人数
期末在职人数 = CALCULATE ( DISTINCTCOUNT ( '员工信息'[员工工号] ), FILTER ( FILTER ( '员工信息', '员工信息'[入职日期] <= MAX ( '日期表'[日期] ) ), '员工信息'[离职日期] > MAX ( '日期表'[日期] ) || '员工信息'[离职日期] = BLANK () ) )
根据日期表相关切片器筛选的日期范围计算满足在职条件的员工数量:1、入职日期在该期末之前;2、未离职或离职日期也在该期末之前(如果日期表未做任何筛选,日期范围为它的最小日期至最大日期)
- 新建度量值,计算该期间新入职人数
该期间新入职人数 = CALCULATE ( DISTINCTCOUNT ( '员工信息'[员工工号] ), FILTER ( FILTER ( '员工信息', '员工信息'[入职日期] <= MAX ( '日期表'[日期] ) && '员工信息'[入职日期] >= MIN ( '日期表'[日期] ) ), '员工信息'[离职日期] > MAX ( '日期表'[日期] ) || '员工信息'[离职日期] = BLANK () ) )
根据日期表的筛选条件,计算期间新入职的员工数,条件如下:1、入职日期在期间内;2、离职日期在期末之后或未离职;
- 新建列,获取出生年份
出生年份 = YEAR([出生日期])
- 新建度量值,计算30岁以下员工占比,格式设置为百分比
30岁以下员工占比 = VAR Seleted_Year = MAX('日期表'[年]) VAR SN_Under30 = CALCULATE ( [期末在职人数], Seleted_Year - YEAR('员工信息'[出生日期]) < 30 ) RETURN DIVIDE ( SN_Under30, [期末在职人数] )
根据日期表筛选日期的期末,计算年龄:期末年 - 出生年 < 30。由于要根据筛选条件计算期末时的 年龄,所以必须在度量中处理。如果只是计算当前年龄,可以用新列:Year(Today()) - '员工信息'[出生年份] 根据期末日期,筛选30岁以下的[期末在职人数],除以[期末在职人数]
人员结构可视化报告
- 添加年份、季度切片器,年份筛选为2016年后
- 卡片图展示期末在职人数、该期间新入职人数、30岁以下员工占比
- 制作部门在职人员数量条形图,按照人数排序
- 按性别、文化程度、职称制作人员构成饼图
- 在职人数和30岁以下员工折线+柱状图,显示数据标签,展开层次结构中的所有下级级别到月
- 人员结构可视化报告
离职率模型设计
- 新建度量值,计算期间离职人数
期间离职人数 = CALCULATE ( DISTINCTCOUNT ( '员工信息'[员工工号] ), FILTER ( FILTER ( '员工信息', '员工信息'[入职日期] <= MAX ( '日期表'[日期] ) ), '员工信息'[离职日期] <= MAX ( '日期表'[日期] ) && '员工信息'[离职日期]>=MIN('日期表'[日期]) ) )
条件说明:1、入职在期末之前;2、离职在期间
- 新建度量值,计算离职率,格式设置为百分比
离职率 = DIVIDE([期间离职人数],[期末在职人数]+[期间离职人数])
离职率可视化报告
- 卡片图、切片器的制作方法同上
- 添加左侧部门切片器
- 制作期间离职人数和期间新入职人数按时间变化的折线柱状图
离职率分析总结
在本例中,我们可以得到以下信息:
- 该公司的员工以销售人员为主,男女比例相对均衡
- 2016~2017年该公司员工数量急剧攀升,可能是业务扩张所致,2018年则相对平缓。这种扩张同样体现在离职分析中,2017年每月离职人员数量都小于入职人员数量,员工净流入
- 该公司以30岁以下员工为主,非常年轻化
- 2016~2018年该公司离职率虽然有攀升的态势,但基本维持在30%左右。对于销售型公司来说这个离职率相当低,人员稳定性良好。因为业务企业销售人员在一年中全部更新一遍也是有可能的。
- 各部门离职状况中,在销售二部离职人员中含有大量的店长,需要引起警示
离职分析在实际应用中可加入离职原因分析,以便发现公司管理问题所在,但不能扶余表面,需要和离职员工做良好的沟通,了解真实原因。另外,异常状态的部门可通过与别的部门横向比较以发现问题所在。
新员工分析数据加载
- 新建报表
- 加载员工信息表中的员工信息和培训记录
- 选中后5列培训成绩数据,将空值替换为0
- 选中后5列培训成绩数据,执行逆透视列,将成绩显示为一列
- 将列表修改为课程名称和得分
- 员工信息和培训记录建立关联关系
- 新建列,在员工信息表中新建年龄、年龄段、工龄、工龄段列(假设分析日期为2018年9月30号,符合数据实际情况)
年龄 = YEAR(DATE(2018, 9, 30))-YEAR('员工信息'[出生日期]) 年龄段 = SWITCH ( TRUE (), '员工信息'[年龄] < 30, "30岁以下", '员工信息'[年龄] < 40, "30-40岁", '员工信息'[年龄] < 50, "40-50岁", "50岁以上" ) 工龄 = IF ( '员工信息'[离职日期] > 0, ROUND ( ( '员工信息'[离职日期] - '员工信息'[入职日期] ) / 365, 1 ), ROUND ( ( DATE(2018, 9, 30) - '员工信息'[入职日期] ) / 365, 1 ) ) 工龄段 = SWITCH ( TRUE (), '员工信息'[工龄] < 0.5, "半年以下", '员工信息'[工龄] < 1, "0.5-1年", '员工信息'[工龄] < 3, "1-3年", "3年以上" )
- 新建列,在培训记录表中新建考核结果列
考核结果 = IF('培训记录'[得分]>=60,"通过",if('培训记录'[得分]>0,"不及格","未提交答卷"))
- 新建列,计算每个员工考试通过的课程数量
通过课程数量 = COUNTROWS(FILTER(RELATEDTABLE('培训记录'),'培训记录'[考核结果]="通过"))
COUNTROWS 函数对指定表或表达式定义的表中的行数目进行计数 RELATEDTETABLE 函数更改在其中筛选数据的上下文,并在指定的新上下文中计算表达式
- 新建度量值,在职员工数量、新员工数量、新员工比例(格式为百分比)
在职员工数量 = CALCULATE(DISTINCTCOUNT('员工信息'[员工工号]),'员工信息'[员工状态]="在职") 新员工数量 = CALCULATE([在职员工数量],'员工信息'[工龄段]="半年以下") 新员工比例 = DIVIDE([新员工数量],[在职员工数量])
- 新建度量值,计算新员工入职考试通过人数
新员工入职考试通过人数 = CALCULATE([新员工数量] ,'员工信息'[通过课程数量]=5)
新员工分析报告
- 下载雷达图和ChicletSlicer切片器
- 在职员工数量、新员工数量、新员工比例卡片图
- 按年龄段、文化程度新员工比例环形图
- 各部门新员工数量和入职考试通过人数柱状图
- 在职员工各部门比例百分比堆积条形图,显示数据标签
员工仪表盘
- 添加ChicletSlicer切片器,字段中的类别设置为姓名,关闭多重选择,打开强制选择,方向改为水平,列改为10
- 设置页面筛选器,设置员工状态为在职,工龄段为半年以下
- 添加以下卡片图:姓名、出生日期、入职日期、文化程度、所在部门、职称等,设置标题和边框
- 新建列,计算培训信息提示度量值,并添加卡片图
培训信息提示 = VAR PASS_N='员工信息'[通过课程数量] RETURN IF(PASS_N=5,"该员工入职考试已全部通过","该员工尚有"&5-PASS_N&"门课程未通过")
- 新建列,在培训记录表中添加及格线和得分信息的合并
及格线 = 60 合并 = '培训记录'[课程名称]&" "&'培训记录'[得分]&"分"
- 添加雷达图,设置类别为合并,设置Y轴为及格线和得分
制作多人对比雷达图
- 添加部门、工龄段和员工切片器,
- 添加成绩矩阵
获取更多视觉对象,添加Radar/Polar Chart - xViz雷达图