如何在 Power Query 中按名称和总时间分组

问题描述 投票:0回答:1

上下文:我从打卡/下班系统中提取了原始数据,该数据向我显示了人们进出办公室的时间。我需要转换数据,以便计算一些统计数据和图表。

输入:我的 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 解决方案。

python mysql powerquery
1个回答
0
投票

无论您是在 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.MinList.Max ,它们分别返回列表中的最小(第一个)和最大(最后一个)值。

看看上面是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.