上下文:我从打卡/下班系统中提取了原始数据,该数据向我显示了人们进出办公室的时间。我需要转换数据,以便计算一些统计数据和图表。
输入:我的 Power Query 的最后一步如下所示:
姓名 | 日期 | 上午_下午 | 时间分钟 | 最大时间 | AM_In_raw | AM_Out_raw | PM_In_raw | PM_Out_raw |
---|---|---|---|---|---|---|---|---|
巴勃罗 | 2024年4月29日 | 上午 | 08:27:21 | 12:22:01 | 08:27:21 | 12:22:01 | 00:00:00 | 00:00:00 |
巴勃罗 | 2024年4月29日 | 下午 | 14:13:02 | 19:16:00 | 00:00:00 | 00:00:00 | 14:13:02 | 19:16:00 |
巴勃罗 | 2024年4月30日 | 上午 | 08:09:15 | 12:17:24 | 08:09:15 | 12:17:24 | 00:00:00 | 00:00:00 |
巴勃罗 | 2024年4月30日 | 下午 | 14:17:28 | 18:06:04 | 00:00:00 | 00:00:00 | 14:17:28 | 18:06:04 |
所需输出:我想按名称和日期对行进行分组并对时间列进行求和,因此每个名称和日期的进/出时间位于一行中。它应该看起来像这样:
姓名 | 日期 | 上午_输入 | AM_输出 | PM_输入 | PM_输出 |
---|---|---|---|---|---|
巴勃罗 | 2024年4月29日 | 08:27:21 | 12:22:01 | 14:13:02 | 19:16:00 |
巴勃罗 | 2024年4月30日 | 08:09:15 | 12:17:24 | 14:17:28 | 18:06:04 |
问题:当我尝试对日期求和(聚合)时,大多数单元格中都会出现“错误”。
= Table.Group(#"Filtered Pablo", {"Name", "Date"},
{{"AM_In", each List.Sum([AM_In_raw]), type any},
{"AM_Out", each List.Sum([AM_Out_raw]), type any},
{"PM_In", each List.Sum([PM_In_raw]), type any},
{"PM_Out", each List.Sum([PM_Out_raw]), type any}})
问题:使用 Excel 中的 Power Query 将多行合并为包含所有有效值的行的好方法是什么?
提前感谢您提供任何有助于找到可行解决方案的线索。如果有最佳实践或技术来解决不同场景下的此类问题,我们将不胜感激。
也欢迎 SQL 或 Python 解决方案。
无论您是在 Excel 中的 Power Query 中聚合(求和)时间值还是其他类型的值,确保这些值采用其可以处理的格式非常重要。 时钟输入/输出时间通常表示为时间,即小时、分钟和秒,但 Excel 可能会将它们解释为文本或其他类型。
在您的情况下,因为您正在尝试对时间求和,所以您不想对原始时钟标记求和。您希望将时间列替换为每个人每个特定日期的第一个(最早)和最后一个(最新)值。
我们不对时间条目求和,因此 List.Sum 不适用。
= Table.Group(#"Filtered Pablo", {"Name", "Date"},
{{"AM_In", each List.Min([AM_In_raw]), type time},
{"AM_Out", each List.Max([AM_Out_raw]), type time},
{"PM_In", each List.Min([PM_In_raw]), type time},
{"PM_Out", each List.Max([PM_Out_raw]), type time}})
我已将 List.Sum 替换为 List.Min 和 List.Max ,它们分别返回列表中的最小(第一个)和最大(最后一个)值。
看看上面是否有效。