PowerBI HR应用之离岗时间计算

背景

很多企业实行比较人性化的管理,员工进出公司以打卡为安全保证,而很多时候会出现员工离岗很长时间的问题。作为一种了解,企业通过打卡机的记录可以了解到一个员工离开工位的时长。例如:

对于任何一个员工:

  • 每日第一次进入打卡记录为其上班时间;
  • 每日最后一次离开打卡记录为其下班时间;
  • 中间每对【离开-进入】的间隔为离岗时长。

那么打卡机会默认记录所有员工的打卡记录,问题来了,需要统计每个员工的离岗时长,如何操作。

不看不知道,一看吓一跳,离岗时长加起来吓死人:

打卡机的记录

打卡机按照如下格式进行记录:

该记录可以导出为Excel文件,接下来的分析就是基于Excel文件了。

难点分析

按照此前介绍的:PowerBI 企业级建模设计流程框架,我们先要明确关注的业务:

  • 每个人每天的离岗时长(分钟数)
  • 每个人每天的上班时间
  • 每个人每天的下班时间
  • 上班或下班可能存在尾随的情况使得配对不严格成立

尤其是第一项的分析,可以看出在考勤打卡机的记录里,某人某日的第一条记录是上班记录,从第二条开始才是离开记录;而最后一条是下班记录,并非离岗记录。而这里需要将【离岗-回岗】合理配对以计算离岗时长。

分治法:将原问题化解为有限的原子问题以及原子问题的重复,并先分类解决原子问题,再整体解决原问题。本案例将使用分治法策略来实现。——《算法导论》(忘了第几版了)

考察单日单人的情况

根据业务的描述,在这个案例中,存在一个非常复杂的数据准备过程,准备好的数据应该:

  • 明确标明某人某日的上班时间
  • 明确标明某人某日的下班时间
  • 明确标明某人某日的离岗回岗时间

以便于使用度量值计算业务指标。

有了这个思路,也无法直接处理,因为根本无从下手,这时我们可以来缩小问题范围,例如:我们只考察一个人的某天的数据,如下:

为此,在PowerBI的查询编辑中,可以得到:

这个过程中存在一定的技巧:

  • 新增一个索引列
  • 对type进行透视
  • 填充 离开 或 回来 的数据
  • 判断类型并标识
  • 去掉由于透视导致的重复
  • 计算离开秒数

这里需要重点强调的是,用这种技巧的处理可以自动处理掉尾随未刷卡的情况,即若无上班打卡或下班打卡记录,则无相应记录。

在这里充分体现了PowerBI查询编辑的强大特性。对于 单人单日 的可以进行处理,那么对于多人多日的则可以利用这个原子处理进行进一步处理。

考察多日多人的情况

由于 单人单日 的情况已经得解,根据 分治法 的策略,现在的问题是如何将原问题化解为子问题并得以整合。不难看出,只需要将多人多日进行分组,每个分组则成为 单人单日 的原子问题。再使用上述方法处理即可,则有:

于是展开数据,即得到整合后的结果。

总结

本案例具有高度推广价值,任何企业基本都使用考勤打卡机,并都可以以Excel导出考勤记录,只不过对这些数据的处理并不简单直观,本案例给出PowerBI 数据准备 的示范,并可以直接移植在 Excel 中。如果是用 VBA 等方法处理,相信会更加复杂。最后感谢订阅会员提供此实际案例。