Power BI中基于员工考勤进出时间计算工时的问题求助
Power BI闸机工时计算解决方案
1. 合并日期与时间为完整DateTime列
原数据中日期和时间字段分离,先合并成可用于计算的完整日期时间字段:
- 在Power Query编辑器中,选中「日期」和「时间」列
- 点击「添加列」→「自定义列」,输入公式:
= [日期] + [时间]
将新列命名为「刷卡时间」
2. 按员工+日期分组提取首进/末次离开
核心逻辑是按员工+日期分组,分别筛选进入、离开记录提取对应最值:
- 点击「转换」→「分组依据」,选择「高级」选项
- 分组列选择你的员工标识字段(如「员工ID」「员工姓名」)和「日期」
- 添加两个聚合列:
- 「首次进入时间」:仅提取动作方向为「进入」的记录中的最早时间,修改聚合逻辑为:
each List.Min(Table.SelectRows(_, (r) => r[动作方向] = "进入")[刷卡时间]) - 「末次离开时间」:仅提取动作方向为「离开」的记录中的最晚时间,修改聚合逻辑为:
each List.Max(Table.SelectRows(_, (r) => r[动作方向] = "离开")[刷卡时间])
- 「首次进入时间」:仅提取动作方向为「进入」的记录中的最早时间,修改聚合逻辑为:
完整分组代码示例(替换你的表名和字段名):
Table.Group( 你的表名, {"员工ID", "日期"}, { {"首次进入时间", each List.Min(Table.SelectRows(_, (r) => r[动作方向] = "进入")[刷卡时间]), type datetime}, {"末次离开时间", each List.Max(Table.SelectRows(_, (r) => r[动作方向] = "离开")[刷卡时间]), type datetime} } )
3. 计算工时
添加自定义列计算时间差(以小时为单位):
= Duration.TotalHours([末次离开时间] - [首次进入时间])
若需要分钟格式,可改用Duration.TotalMinutes后再调整显示格式。
问题排查
你之前的代码未合并成功,大概率是以下原因:
- 未同时按员工+日期分组,导致同一员工同一天的记录未被归为一组
- 聚合时未筛选动作方向,直接取了所有刷卡时间的最值,而非对应进入/离开动作的记录
内容的提问来源于stack exchange,提问作者Douglas Cabral
相关产品推荐
相关产品推荐

