如何用Power Query按ID提取首次呼叫日期与最近呼叫代理?
问题解决:按Id提取首次呼叫日期与最近呼叫代理
需求说明
针对每个唯一的Id,提取两个关键信息:
- 该Id的首次呼叫日期
- 该Id最近一次呼叫对应的代理名称
示例输出:Id为16468的首次呼叫日期为02-01-2023,最近呼叫的代理为ANGEL(基于该Id的最近呼叫日期)
正确Power Query实现代码
替换你现有代码为以下内容即可:
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], // 统一数据类型,确保日期和Id格式正确 #"设置数据类型" = Table.TransformColumnTypes(Source,{ {"Id", Int64.Type}, {"call date", type date}, {"Agent name", type text} }), // 按Id分组,聚合所需字段 #"按Id分组" = Table.Group(#"设置数据类型", {"Id"}, { {"首次呼叫日期", each List.Min([call date]), type date}, {"最近呼叫代理", each let // 筛选出当前Id的最大日期对应的行 最大日期 = List.Max([call date]), 对应代理 = Table.SelectRows(_, each [call date] = 最大日期)[Agent name]{0} in 对应代理, type text} }), // 可选:将日期格式转为示例中的dd-mm-yyyy样式 #"格式化日期" = Table.TransformColumns(#"按Id分组", { {"首次呼叫日期", each Date.ToText(_, "dd-MM-yyyy"), type text} }) in #"格式化日期"
代码说明
- 设置数据类型:统一Id、呼叫日期、代理名称的格式,避免后续聚合出错
- 按Id分组:
- 用
List.Min([call date])直接获取每个Id的首次呼叫日期 - 先通过
List.Max([call date])找到每个Id的最近呼叫日期,再筛选出对应行的代理名称
- 用
- 格式化日期:可选步骤,将日期转为示例中的
dd-MM-yyyy格式
原有代码的问题
你拆分了唯一Id表和日期表,但没有将两者关联并做聚合操作,自然无法得到每个Id对应的首次日期和最近代理。通过Table.Group可以一步完成分组和聚合,效率更高。
内容的提问来源于stack exchange,提问作者Saurabh Singh
相关产品推荐
相关产品推荐

