1. 概述
基础表处理 中已经将数据表接入 BI,并对其进行了简单的清洗。
接下来需要解决的问题有:
只有请假的员工会标注考勤状态,有过打卡行为的员工不能区分考勤状态;
打卡信息中缺少员工的姓名、年龄、性别等基础信息,这些信息都在「人员信息表」中;
数据中只有打卡时间,但是缺少工作时长的数据等等。
需要通过 在我的分析编辑数据 来解决。
2. 区分打卡行为
2.1 标记有打卡行为的数据
1)新建一个分析主题,并添加「公共数据」中「打卡信息表」的字段。
并双击表名重命名为「考勤数据(不请假)」表。
2)过滤出非公休非请假的数据,即「状态」字段为空时的数据,这部分数据中员工应该正常打卡,将其过滤出来以便对他们的打卡数据进行分析。如下图所示:
过滤详细说明参见:过滤基础功能
3)添加分组汇总,求出用户每天打卡的最早时间和最晚时间。如下图所示:
最早时间对应员工的上班时间
最晚时间对应员工的下班时间
分组汇总详细说明参见:分组汇总基础功能
4)新建一个字段「判断是否迟到」,在李明明的公司中,晚于 9:30 到公司就算迟到。所以我们新建一个 9:30 的字段用于判断,输入公式:
TODATE(CONCATENATE(LEFT(日期,10)," ","09:30:00")),如下图所示:
公式说明:
公式 | 说明 |
---|---|
LEFT(日期,10) | 取日期的年月日字段 |
CONCATENATE(LEFT(日期,10)," ","09:30:00") | 拼接出日期+9:30 的迟到时间数据 比如当前日期是 2022-05-05 则得到2022-05-05 09:30:00 |
TODATE(CONCATENATE(LEFT(日期,10)," ","09:30:00")) | 将迟到时间设置为日期类型 |
并使用时间差,如果结果<0,就是迟到,如下图所示:
新增列详细说明参见:新增列-时间差
5)对考勤时间进行比较判断。
当工作时长小于六小时时,判断为缺勤;
当上班时间大于 9:30 时,判断为迟到;其余判断为「全勤」。
计算出工作时长后,新增列输入公式:IF(工作小时<6,"缺勤",IF(是否迟到<0,"迟到","全勤")),如下图所示:
新增列详细说明参见:新增列-公式函数
6)隐藏我们之后不需要的字段,在字段设置中取消勾选即可,如下图所示:
字段设置详细说明参见:字段设置
7)保存并更新该表。
2.2 汇总考勤数据
此时需要将请假的用户数据和未请假的数据进行汇总。
1)在分析主题添加数据:本地工程上的「打卡信息表」重命名为「考勤汇总」表。
2)过滤出所有请假的数据(注意不选择公休和调休数据),如下图所示:
注:因为只统计工作日数据,所以这里不选择公休和调休数据。
3)添加分组汇总,设置和「考勤数据(不请假)」相同的条件,如下图所示:
注:此处为合并 2.1 节数据做准备。
4)将请假的数据和 2.1 节正常打卡的数据合并到一张表中。进行上下合并,如下图所示:
上下合并详细说明参见:上下合并基础功能
3. 合并姓名、性别等数据
已经完成了对考勤数据的整理,接下来希望打卡信息中能新增员工的姓名、年龄、性别等基础信息,这些信息都在「人员信息表」中。
因此需要使用左右合并功能,通过「工号」字段将两张数据表的数据进行合并,由于我们希望保留「打卡信息表」的所有数据,因此选择左合并,如下图所示:
左右合并详细说明参见:左右合并基础功能
4. 计算工作时长和年龄
只有打卡时间但想要知道每个员工的工作时长,此时需要继续使用数据集进行数据处理。
1)使用函数 DATESUBDATE 计算「最晚时间」和「最早时间」的时间差,输入公式:DATESUBDATE(最晚时间,最早时间,"m")/60,如下图所示:
若使用的实时数据,你可以使用新增列-时间差 计算工作时长,如下图所示:
2)在合并数据后,知道了员工身份证号,就可以通过计算,得到员工的年龄,使用公式:YEAR()-TOINTEGER(MID(身份证号码,7,4)),如下图所示:
此时我们的数据处理就完成了,当然可以在使用字段设置取消掉不需要使用的中间字段