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

Power Query中用M语言处理员工重叠时间:保留最长时长记录

解决员工同日重叠活动记录的保留标记问题

需求说明:现有员工活动时间记录表,包含Employee ID、Work Type、Duration (h)、Start TimeStamp、End TimeStamp、Date字段,需给同一员工同日的重叠活动记录添加Keep Row列(标记Yes/No),保留其中时长最长的记录。

原始数据表

Employee IDWork TypeDuration (h)Start TimeStampEnd TimeStampDate
2531(OJT)4.9712/8/2022 7:0212/8/2022 12:0012/8/2022
2531(OJT)4.9512/8/2022 7:0312/8/2022 12:0012/8/2022
2531(Idel)2.5012/8/2022 12:3012/8/2022 15:0012/8/2022
2531(Break)0.5012/8/2022 12:0012/8/2022 12:3012/8/2022

期望结果表

Employee IDWork TypeDuration (h)Start TimeStampEnd TimeStampDateKeep Row
2531(OJT)4.9712/8/2022 7:0212/8/2022 12:0012/8/2022Yes
2531(OJT)4.9512/8/2022 7:0312/8/2022 12:0012/8/2022No
2531(Idel)2.5012/8/2022 12:3012/8/2022 15:0012/8/2022Yes
2531(Break)0.5012/8/2022 12:0012/8/2022 12:3012/8/2022No

实用解决方案

方案1:Power Query(Excel/Power BI)

适用于桌面端数据处理,步骤如下:

  1. 将数据导入Power Query编辑器
  2. 按Employee ID和Date分组:
    • 新列命名为MaxDuration,操作选择「最大值」,目标列选Duration (h)
  3. 添加自定义列Keep Row,输入公式:
    if [Duration (h)] = [MaxDuration] then "Yes" else "No"
    
  4. (可选)删除MaxDuration辅助列,将数据加载回表格

方案2:SQL

适用于数据库端处理,假设表名为employee_activity,执行以下语句:

SELECT 
    ea.*,
    CASE 
        WHEN ea.[Duration (h)] = max_duration.max_dur THEN 'Yes' 
        ELSE 'No' 
    END AS [Keep Row]
FROM 
    employee_activity ea
INNER JOIN (
    SELECT 
        [Employee ID], 
        [Date], 
        MAX([Duration (h)]) AS max_dur
    FROM 
        employee_activity
    GROUP BY 
        [Employee ID], 
        [Date]
) max_duration 
ON ea.[Employee ID] = max_duration.[Employee ID] 
AND ea.[Date] = max_duration.[Date];

内容的提问来源于stack exchange,提问作者Ahmed_Abdelkader

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:25:25