专栏首页PowerBI战友联盟PowerBI HR应用之离岗时间计算

PowerBI HR应用之离岗时间计算

背景

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

对于任何一个员工:

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

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

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

打卡机的记录

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

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

难点分析

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

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

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

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

考察单日单人的情况

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

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

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

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

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

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

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

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

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

考察多日多人的情况

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

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

总结

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

本文分享自微信公众号 - PowerBI战友联盟(powerbichina),作者:BI佐罗

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 个人如何免费注册 PowerBI 账号(终极说明)

    这本来并不是一个问题,但在实际中,却成了大问题。这里做一个统一说明。 下面分两种情况做统一说明。

    BI佐罗
  • 【DAX 系列】高清图解迭代原理并弃用 EARLIER

    这也是 DAX 中,筛选上下文和行上下文的设计学来由。本文会非常简单地让您搞清楚迭代的概念。

    BI佐罗
  • 【DAX 系列】驱动可视化 - 超级颜色控制

    若要解决此问题,请使用十六进制代码(例如,#ABCDEF),或CSS支持的颜色列表中的颜色。

    BI佐罗
  • AI_第一部分 数据结构与算法(12.排序算法实战下)

    第四阶段我们进行深度学习(AI),本部分(第一部分)主要是对底层的数据结构与算法部分进行详尽的讲解,通过本部分的学习主要达到以下两方面的效果:

    还是牛6504957
  • Python基础入门笔记(一)

    既然学习 Python,那么至少得了解下这门语言,知道 Python 代码执行过程吧。Python 的历史有兴趣的百度百科下就有,这个不多说了。

    用户2398817
  • 1003. 猜数游戏 (Standard IO)

    题目描述 有一个“就是它”的猜数游戏,步骤如下:请你对任意输入的一个三位数x,在这三位数后重复一遍,得到一个六位数,467-->467467.把这个数连续除以7...

    attack
  • 浅谈.Net Framework中string.Format原理

    运行结果:Hello, I am nestor, today is 2019-07-08.

    小蜜蜂
  • Python——购物车程序(列表的应用)

    上面的代码,刚学完列表的时候写的,其实存在很多问题:比如商品、价格做到2个列表里,每次索引起来很麻烦,万一不小心价格顺序改一下,大厦直接坍塌,所以要做一个嵌套的...

    Ed_Frey
  • ES6系列_9之对象

    有时候我们会在后台取出key值,而不是我们前台定义好的,这时候我们可以我们可以把后台定义的key值重新构建返回给后台。

    wfaceboss
  • 基于Unix Socket的可靠Node.js HTTP代理实现(支持WebSocket协议)

    实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端。而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源...

    欲休

扫码关注云+社区

领取腾讯云代金券