25-46周 考勤分析专题 -3
优秀创作者
46-4 梳理上午第一次打卡记录 - 题目
在考勤分析中,识别员工每天上午第一次有效打卡时间是判断是否准时到岗的关键指标。由于同一员工可能在早上多次打卡(如反复进出),需从所有早于 09:00 的打卡记录中,提取出当天最早的那次。
本题通过三种不同方法实现该目标,并对比其优缺点,提炼核心思路与适用场景。
🔧 公式解析与对比
✅ 方法一:使用 GROUPBY + MIN 实现按日分组取最小值(推荐)
excel编辑
F2 = LET(D, --D2:D627,
GROUPBY(A2:C627, D, MIN,,0,, D < 0.375))--D2:D627:将文本型时间转为数值(如 "07:44" → 0.03125)
D < 0.375:筛选出早于 09:00 的打卡记录(因为 09:00 = 0.375)
GROUPBY(A2:C627, D, MIN,,0,, ...):
按 日期列 C 分组(即同一天的记录归为一组)
使用 MIN 聚合函数返回每组中 最早的时间
第五个参数 0 表示不显示分组键
最后一个参数为筛选条件:仅保留早于 09:00 的记录
✅ 优点:
代码简洁,逻辑清晰
利用 GROUPBY 自动完成分组与聚合
支持动态数组,性能良好
❌ 缺点:
依赖 GROUPBY 函数(WPS/Excel 365 支持)
不适合复杂条件组合
📌 适用场景:
✅ 方法二:使用 FILTER + 错位法判断首次打卡(经典技巧)
excel编辑
F2 = FILTER(A2:D627, (C2:C627 <> C1:C626) * (D2:D627 < "09:00"))(C2:C627 <> C1:C626):错位比较,判断当前行与上一行的日期是否不同
若日期变化 → 表示进入新一天
即:每天的第一条记录
(D2:D627 < "09:00"):筛选出早于 09:00 的打卡记录
两者相乘(逻辑与):同时满足两个条件的记录被保留
✅ 优点:
不依赖高级函数,兼容性强
“错位法”是处理“首次出现”问题的经典技巧
思路直观,易于理解
❌ 缺点:
假设数据已按日期排序(否则结果错误)
无法处理“某天无早班打卡”的情况(会漏掉)
📌 适用场景:
✅ 方法三:使用 UNIQUE + XLOOKUP + CONCAT 实现去重与匹配(高级连接法)
excel编辑
F2 = LET(M, FILTER(A2:D627, (D2:D627 < "09:00")),
X, TAKE(M,,3), // 提取姓名、日期、序号
Y, UNIQUE(X),
HSTACK(Y,
XLOOKUP(BYROW(Y, CONCAT),
BYROW(X, CONCAT),
TAKE(M,,-1))))M = FILTER(...):先筛选出所有早于 09:00 的打卡记录
X = TAKE(M,,3):提取前三列(序号、姓名、日期)
Y = UNIQUE(X):对“姓名+日期”组合去重,得到每个员工每天的唯一记录
BYROW(Y, CONCAT):将每行拼接为字符串(如 "1刘备2025/10/2")
BYROW(X, CONCAT):对原始数据也做相同拼接
XLOOKUP(...):根据拼接后的键查找对应的打卡时间(即最早的一次)
HSTACK(...):合并结果
✅ 优点:
展示了 CONCAT + XLOOKUP 的强大关联能力
可处理复杂匹配逻辑
结果稳定,不受顺序影响
❌ 缺点:
公式较长,调试困难
性能较低(尤其大数据集)
对初学者不友好
📌 适用场景:
📌 核心知识点总结
编号 | 知识点 | 说明 |
1 | 有打卡 ≠ 打卡正常 | 多次连续打卡可能是异常行为,需进一步分析 |
2 | “上午第一次”需结合时间和日期双重约束 | 时间限制:早于 09:00;日期维度:按天分组 |
3 | GROUPBY 是分组聚合的核心工具 | 可自动完成“按日分组 + 取最小值”,高效准确 |
4 | 错位法是判断“首次出现”的经典技巧 | (C2<>C1) 表示进入新一天,常用于统计首条记录 |
5 | UNIQUE + XLOOKUP 可实现去重与匹配 | 通过拼接字段构造唯一键,实现精准引用 |
6 | CONCAT 是构建复合键的有效手段 | 将多列合并为单一字符串,便于查找 |
7 | MIN 函数可用于提取最早时间 | 在时间数值化后,MIN 等价于“最早” |
🎯 实际应用建议
优先推荐使用方法一(GROUPBY + MIN)
✅ 代码最短,逻辑最清晰
✅ 性能最优,适合大规模数据
✅ 符合现代 Excel 开发规范
若环境不支持 GROUPBY,可用方法二(错位法)
✅ 兼容性强,适用于旧版软件
✅ 逻辑直观,适合初学者
方法三仅作拓展学习参考
✅ 展示了高级函数的组合能力
✅ 不推荐用于生产环境
注意约束条件:
✅ 仅提取早于 09:00 的打卡记录
✅ 每天取最早一次
✅ 输出应包含:序号、姓名、打卡日期、上午第一次打卡时间
✅ 数据需按日期排序(方法二要求)
🧩 示例效果说明
成功提取出每位员工每天早于 09:00 的最早打卡时间,为后续迟到分析提供依据。
📚 小结口诀
分组聚合最省力;
错位判断第一天,
连接匹配也不差;
时间小于九点前,
MIN取最小才准。”
此操作是考勤数据分析流程中的关键一步。掌握这些技巧,不仅能高效提取上午首次打卡时间,还能迁移到其他业务场景(如晚班最后一次打卡、周末加班识别等),大幅提升数据分析能力。
46-5 梳理上午第一次打卡记录升级 - 题目
在考勤分析中,除了提取每天早上首次打卡时间外,还需处理无早班打卡的情况。例如:
本题通过三种不同方法实现该功能,并对比其优缺点,提炼核心思路与适用场景。
🔧 公式解析与对比
✅ 方法一:使用 GROUPBY + MIN + 条件判断(推荐)
excel编辑
F2 = LET(D, --D2:D627,
A, GROUPBY(A2:C627, D, MIN,,0),
B, TAKE(A,,-1), // 提取最小打卡时间列
HSTACK(TAKE(A,,3), IF(B < 0.375, B, "未打卡")))--D2:D627:将文本型时间转为数值(如 "07:44" → 0.03125)
GROUPBY(A2:C627, D, MIN,,0):
按 日期列 C 分组
使用 MIN 聚合函数返回每组中 最早的时间
第五个参数 0 表示不显示分组键
B = TAKE(A,,-1):提取聚合后的最小时间列
IF(B < 0.375, B, "未打卡"):
若时间早于 09:00(即 < 0.375)→ 返回实际时间
否则 → 返回“未打卡”
HSTACK(...):合并序号、姓名、日期、结果
✅ 优点:
代码简洁,逻辑清晰
利用 GROUPBY 自动完成分组与聚合
支持动态数组,性能良好
❌ 缺点:
依赖 GROUPBY 函数(WPS/Excel 365 支持)
不适合复杂条件组合
📌 适用场景:
✅ 方法二:使用 FILTER + 错位法 + 条件判断(经典技巧)
excel编辑
F2 = LET(A, FILTER(A2:D627, C2:C627 <> C1:C626),
X, TAKE(A,,-1), // 提取打卡时间
B, IF(X > "09:00", "未打卡", X),
HSTACK(TAKE(A,,3), B))FILTER(A2:D627, C2:C627 <> C1:C626):
错位比较,筛选出每天的第一条记录
X = TAKE(A,,-1):提取打卡时间列
IF(X > "09:00", "未打卡", X):
若时间晚于 09:00 → 标记为“未打卡”
否则 → 返回原始时间
HSTACK(...):合并结果
✅ 优点:
不依赖高级函数,兼容性强
“错位法”是处理“首次出现”问题的经典技巧
思路直观,易于理解
❌ 缺点:
假设数据已按日期排序(否则结果错误)
无法处理“某天无早班打卡”的情况(会漏掉)
📌 适用场景:
✅ 方法三:使用 UNIQUE + XLOOKUP + CONCAT 实现去重与匹配(高级连接法)
excel编辑
F2 = LET(A, FILTER(A2:D627, (C2:C627 <> C1:C626) * (D2:D627 < "09:00")),
B, UNIQUE(A2:C627),
HSTACK(B,
XLOOKUP(BYROW(B, CONCAT),
BYROW(TAKE(A,,3), CONCAT),
TAKE(A,,-1),
"未打卡")))A = FILTER(...):先筛选出所有早于 09:00 的打卡记录
B = UNIQUE(A2:C627):对“姓名+日期”组合去重,得到每个员工每天的唯一记录
BYROW(B, CONCAT):将每行拼接为字符串(如 "1刘备2025/10/2")
BYROW(TAKE(A,,3), CONCAT):对原始数据也做相同拼接
XLOOKUP(...):根据拼接后的键查找对应的打卡时间
若找不到 → 返回默认值“未打卡”
HSTACK(...):合并结果
✅ 优点:
展示了 CONCAT + XLOOKUP 的强大关联能力
可处理复杂匹配逻辑
结果稳定,不受顺序影响
❌ 缺点:
公式较长,调试困难
性能较低(尤其大数据集)
对初学者不友好
📌 适用场景:
📌 核心知识点总结
编号 | 知识点 | 说明 |
1 | “未打卡”是业务逻辑的重要补充 | 有打卡 ≠ 有早班打卡,需区分“无早班打卡”状态 |
2 | GROUPBY 是分组聚合的核心工具 | 可自动完成“按日分组 + 取最小值”,高效准确 |
3 | TAKE 函数可用于列的选择与二次判断 | 如 TAKE(A,,-1) 提取最后一列,便于后续条件判断 |
4 | 错位法是判断“首次出现”的经典技巧 | (C2<>C1) 表示进入新一天,常用于统计首条记录 |
5 | UNIQUE + XLOOKUP 可实现去重与匹配 | 通过拼接字段构造唯一键,实现精准引用 |
6 | CONCAT 是构建复合键的有效手段 | 将多列合并为单一字符串,便于查找 |
7 | MIN 函数可用于提取最早时间 | 在时间数值化后,MIN 等价于“最早” |
🎯 实际应用建议
优先推荐使用方法一(GROUPBY + MIN + IF)
✅ 代码最短,逻辑最清晰
✅ 性能最优,适合大规模数据
✅ 符合现代 Excel 开发规范
若环境不支持 GROUPBY,可用方法二(错位法)
✅ 兼容性强,适用于旧版软件
✅ 逻辑直观,适合初学者
方法三仅作拓展学习参考
✅ 展示了高级函数的组合能力
✅ 不推荐用于生产环境
注意约束条件:
✅ 仅提取早于 09:00 的打卡记录
✅ 每天取最早一次
✅ 若无早班打卡 → 显示“未打卡”
✅ 输出应包含:序号、姓名、打卡日期、上午第一次打卡
✅ 数据需按日期排序(方法二要求)
🧩 示例效果说明
成功提取出每位员工每天早于 09:00 的最早打卡时间,并对无早班打卡的日期标记为“未打卡”,为后续迟到分析提供完整依据。
📚 小结口诀
分组聚合最省力;
错位判断第一天,
连接匹配也不差;
时间小于九点前,
MIN取最小才准;
若无打卡标未打,
业务逻辑更完整。”
此操作是考勤数据分析流程中的关键一步。掌握这些技巧,不仅能高效提取上午首次打卡时间,还能迁移到其他业务场景(如晚班最后一次打卡、周末加班识别等),大幅提升数据分析能力。