You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:12:44