Power Query中用M语言处理员工重叠时间:保留最长时长记录
解决员工同日重叠活动记录的保留标记问题
需求说明:现有员工活动时间记录表,包含Employee ID、Work Type、Duration (h)、Start TimeStamp、End TimeStamp、Date字段,需给同一员工同日的重叠活动记录添加Keep Row列(标记Yes/No),保留其中时长最长的记录。
原始数据表
| Employee ID | Work Type | Duration (h) | Start TimeStamp | End TimeStamp | Date |
|---|---|---|---|---|---|
| 2531 | (OJT) | 4.97 | 12/8/2022 7:02 | 12/8/2022 12:00 | 12/8/2022 |
| 2531 | (OJT) | 4.95 | 12/8/2022 7:03 | 12/8/2022 12:00 | 12/8/2022 |
| 2531 | (Idel) | 2.50 | 12/8/2022 12:30 | 12/8/2022 15:00 | 12/8/2022 |
| 2531 | (Break) | 0.50 | 12/8/2022 12:00 | 12/8/2022 12:30 | 12/8/2022 |
期望结果表
| Employee ID | Work Type | Duration (h) | Start TimeStamp | End TimeStamp | Date | Keep Row |
|---|---|---|---|---|---|---|
| 2531 | (OJT) | 4.97 | 12/8/2022 7:02 | 12/8/2022 12:00 | 12/8/2022 | Yes |
| 2531 | (OJT) | 4.95 | 12/8/2022 7:03 | 12/8/2022 12:00 | 12/8/2022 | No |
| 2531 | (Idel) | 2.50 | 12/8/2022 12:30 | 12/8/2022 15:00 | 12/8/2022 | Yes |
| 2531 | (Break) | 0.50 | 12/8/2022 12:00 | 12/8/2022 12:30 | 12/8/2022 | No |
实用解决方案
方案1:Power Query(Excel/Power BI)
适用于桌面端数据处理,步骤如下:
- 将数据导入Power Query编辑器
- 按
Employee ID和Date分组:- 新列命名为
MaxDuration,操作选择「最大值」,目标列选Duration (h)
- 新列命名为
- 添加自定义列
Keep Row,输入公式:if [Duration (h)] = [MaxDuration] then "Yes" else "No" - (可选)删除
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
相关产品推荐
相关产品推荐

