25-46周 考勤分析专题 -1

古哥计划
古哥计划 KVP

优秀创作者

46-1 打卡记录分析判断 - 题目

在考勤系统中,根据每日打卡次数判断员工出勤状态是常见需求。通常规则如下:

  • 0 次 → 没上班

  • 4 次 → 打卡正常(上下班各两次)

  • 其他 → 打卡异常

本节通过三种不同方法实现该逻辑,并对比其优缺点,提炼核心思路。


🔧 公式解析与对比

方法一:使用 LET + 多层嵌套 IF 实现条件判断

excel编辑

D2 = LET(E,E2:.E10000, IF(E=0,"没上班", IF(E=4,"打卡正常","打卡异常")))
🔍 解析步骤
LET(E,E2:.E10000):定义变量 E 为打卡次数区域,提升可读性
IF(E=0,"没上班", ...):若打卡次数为 0,则返回“没上班”
否则进入第二层判断:IF(E=4,"打卡正常","打卡异常")
结果示例
E=0 → “没上班”
E=4 → “打卡正常”
E=1,2,3 → “打卡异常”

优点

  • 代码简洁,逻辑清晰

  • 使用 LET 提升可维护性

  • 支持动态数组,批量处理多行

缺点

  • 嵌套层级较深,易误写

  • 不适合复杂多条件场景

📌 适用场景

简单三分类判断,数据结构稳定的情况

方法二:使用 VLOOKUP 构建映射表(查表法)

excel编辑

D2 = IFNA(VLOOKUP(E2:.E1000,{0,"没上班";4,"打卡正常"},2,0),"打卡异常")
🔍 解析步骤
{0,"没上班";4,"打卡正常"}:创建一个匿名二维数组作为“映射表”
第一列为打卡次数
第二列为对应状态
VLOOKUP(..., ..., 2, 0):查找当前值对应的标签(精确匹配)
IFNA(...,"打卡异常"):若未找到(如 E=1,2,3),返回默认值“打卡异常”

优点

  • 思路新颖,将判断转化为“查表”操作

  • 易于扩展:只需修改映射表即可添加新规则

  • 可视化强,便于非技术人员理解

缺点

  • 若映射表不完整,需依赖 IFNA 处理缺失值

  • 对初学者有一定门槛(需理解数组常量)

📌 适用场景

规则明确且可能变动的场景,适合团队协作和后期维护

方法三:使用 IFS 函数实现多条件分支

excel编辑

D2 = LET(E,E2:.E10000, IFS(E=0,"没上班", E=4,"打卡正常", E<>4,"打卡异常"))
🔍 解析步骤
LET(E,...):定义变量,增强可读性
IFS(...):支持多个条件依次判断
条件1:E=0 → 返回“没上班”
条件2:E=4 → 返回“打卡正常”
条件3:E<>4 → 返回“打卡异常”
特点
IFS 是 Excel 365 引入的现代函数,专为多条件设计
支持任意数量条件,无需嵌套 IF
最后一个条件可用 TRUE 表示“否则”

优点

  • 代码结构清晰,逻辑直观

  • 更加灵活,适合复杂判断逻辑

  • 可读性强,易于调试

缺点

  • 要求支持 IFS 函数(WPS/Excel 365 支持)

  • 若条件顺序不当可能导致错误(建议按优先级排列)

📌 适用场景

多条件判断、规则频繁变更、追求代码整洁性的项目

📌 核心知识点总结

编号

知识点

说明

1

条件判断的核心是“分段映射”

将数值(打卡次数)映射到文本状态,本质是分类逻辑

2

IF 是基础条件函数

支持两分支判断,嵌套可实现多级逻辑

3

LET 提升公式可读性和性能

定义变量避免重复引用,尤其适用于大范围计算

4

VLOOKUP 可用于规则查表

将条件判断抽象为“查找表”,增强灵活性和可维护性

5

IFS 是现代条件判断的最佳选择

替代嵌套 IF,语法更简洁,逻辑更清晰

6

IFNA 保证输出完整性

处理查表失败情况,避免出现 #N/A 错误


🎯 实际应用建议

  1. 推荐使用方法三IFS

逻辑清晰、代码简洁

支持未来扩展(如增加“漏打卡”、“早退”等状态)

符合现代 Excel 开发规范

  1. 若需快速实现且规则简单,可用方法一(嵌套 IF

无需额外函数,兼容性好

适合临时分析任务

  1. 若希望规则可视化、便于维护,推荐方法二VLOOKUP 查表)

易于修改映射关系

适合多人协作环境

  1. 注意约束条件

  • 打卡次数为整数(0~4)

  • 0 → “没上班”

  • 4 → “打卡正常”

  • 其他 → “打卡异常”

  • 输出应为文本标签,不可为空

📚 小结口诀

“打卡次数定状态,
三类判断要分清;
IF嵌套虽能解,
IFS更简明;
查表用VLOOKUP,
规则一改全更新。”

46-2 打卡记录筛选 -题目

在考勤分析中,常需从原始数据中筛选出实际有打卡记录的行,即:

剔除“打卡次数 = 0”的无效记录,仅保留有真实考勤行为的数据。

本题通过三种不同方法实现该功能,并对比其优缺点,提炼核心思路与适用场景。


🔧 公式解析与对比

方法一:使用 FILTER 函数直接筛选(推荐)

excel编辑

A2 = FILTER(打卡记录!A2:.ZL30000, 打卡记录!E2:.E30000 > 0)
🔍 解析步骤
打卡记录!A2:.ZL30000:指定整个数据区域(含序号、姓名、日期、判定、打卡次数等)
打卡记录!E2:.E30000 > 0:作为筛选条件,判断“打卡次数是否大于0”
FILTER(...):返回满足条件的所有行

优点

  • 语法简洁,逻辑清晰

  • 性能优秀,支持动态数组

  • 是现代 Excel 中最直观的筛选方式

缺点

  • 依赖 FILTER 函数(WPS/Excel 365 支持)

  • 不适合需要额外处理(如去重、排序)的复杂场景

📌 适用场景

快速提取有效数据,用于后续统计或报表生成

方法二:使用 IF + TOCOL + WRAPROWS 实现“伪筛选”(扩展思路)

excel编辑

A2 = LET(A, 打卡记录!A2:.ZL30000,
         WRAPROWS(TOCOL(IF(INDEX(A,,5)>0,A,B),3),
                 COLUMNS(A)))
🔍 解析步骤
INDEX(A,,5):获取第5列(打卡次数)
IF(INDEX(A,,5)>0, A, B)
若打卡次数 > 0 → 返回整行数据
否则 → 返回 B(强制错误值,如空单元格或 #N/A
TOCOL(...,3):将结果转为一维列,参数 3 表示忽略错误值
WRAPROWS(..., COLUMNS(A)):将一维数组重新整理为二维表,列宽与原表一致

优点

  • 不依赖 FILTER,兼容性更强

  • 展示了“用 IF 构造真假值 + TOCOL 过滤错误”的经典技巧

  • 可灵活控制输出格式

缺点

  • 公式较长,理解门槛较高

  • 性能略低于 FILTER

  • 需要预设列宽(COLUMNS(A)

📌 适用场景

在不支持 FILTER 的旧版 Excel 或特定环境中使用,作为替代方案

方法三:使用 GROUPBY 的筛选参数(高级聚合技巧)

excel编辑

A2 = LET(A, 打卡记录!A2:.ZL30000,
         TAKE(GROUPBY(A, A, N,,0,, 打卡记录!E2:.E30000 > 0),, COLUMNS(A)))
🔍 解析步骤
GROUPBY(A, A, N,,0,, 条件)
第一个 A:分组依据(按行唯一标识)
第二个 A:待处理数据
N:聚合函数(此处为占位符)
最后一个参数:打卡记录!E2:.E30000 > 0,表示只保留满足条件的行
TAKE(...,, COLUMNS(A)):提取所有列,保持原始结构

优点

  • 利用 GROUPBY 的筛选能力,无需显式过滤

  • 展示了聚合函数在非统计场景下的灵活应用

  • 可扩展至更复杂的条件组合

缺点

  • 过度复杂化问题,增加了计算负担

  • 不符合“简单有效”的原则

  • 对初学者不友好

📌 适用场景

仅作拓展学习参考,实际项目中不推荐使用

📌 核心知识点总结

编号

知识点

说明

1

FILTER 是现代筛选的核心函数

直接根据条件提取数据,简洁高效,是首选方案

2

IF + TOCOL 是通用过滤模式

通过构造真假值并利用 TOCOL 的错误屏蔽功能实现筛选,适用于无 FILTER 环境

3

WRAPROWS 可将一维数组还原为二维表

结合 TOCOL 使用,实现“扁平化 → 结构化”的转换

4

INDEX(A,,5) 提取指定列数据

用于访问多列区域中的某一列(如第5列:打卡次数)

5

B 作为错误值占位符

IF 中返回 B 可产生错误,被 TOCOL 自动忽略

6

GROUPBY 支持筛选参数

虽然功能强大,但在此场景下属于“过度设计”,建议慎用


🎯 实际应用建议

  1. 优先推荐使用方法一FILTER

代码最短,性能最优

易于理解和维护

符合现代 Excel 开发规范

  1. 若环境不支持 FILTER,可用方法二IF + TOCOL + WRAPROWS

兼容性强,适用于旧版软件

展示了经典的数据清洗技巧

  1. 方法三仅作拓展学习参考

了解 GROUPBY 的高级用法

不推荐用于生产环境

  1. 注意约束条件

  • 筛选条件为:打卡次数 > 0

  • 输出应包含所有字段(序号、姓名、日期、判定、打卡次数、考勤时间等)

  • 排除“没上班”记录(即打卡次数为 0 的行)

  • 保留原有顺序(按日期排列)

📚 小结口诀

“筛选数据看条件,
FILTER最快又简单;
IF加TOCOL,
错误自动删;
GROUPBY虽能解,
复杂不如简。”

此操作是数据清洗流程中的关键一步。掌握这些技巧,不仅能高效完成筛选任务,还能迁移到其他业务场景(如订单过滤、客户筛选、日志提取等),大幅提升数据分析效率。

广东省
浏览 757
收藏
1
分享
1 +1
+1
全部评论