Power Query中如何从列提取最新日期——MAX()函数用法
解决Power Query添加全局最新日期及上一日期列的方案
没问题,我来帮你搞定这个报表需求!咱们用Power Query的M语言就能轻松实现,确保整列的MOST_CURRENT_DATE和PREVIOUS_DATE值完全一致,具体步骤和代码如下:
1. 先把Report_Date转成标准日期格式
你的Report_Date是1/2018这类文本格式,得先转换成可排序的日期类型,这里我们默认取每个月的最后一天(如果需要取第一天,改个函数就行):
// 给原表添加转换后的日期列,方便后续计算全局日期 = Table.AddColumn(Skipped_Issue, "Converted_Date", each Date.EndOfMonth(Date.FromText([Report_Date], [Format="M/yyyy"])))
2. 计算全局最新日期和上一日期
接下来分两种常见场景,你可以按需选择:
场景一:上一日期是数据中存在的第二大日期
如果需要的是列表里仅次于最新日期的那个实际存在的日期(比如你样本数据里最新是4/2018,上一日期就是2/2018),用这段完整代码:
let Source = Skipped_Issue, // 你的原始表 // 第一步:转换日期格式 AddedConvertedDate = Table.AddColumn(Source, "Converted_Date", each Date.EndOfMonth(Date.FromText([Report_Date], [Format="M/yyyy"]))), // 获取去重后降序排列的日期列表 SortedDates = List.Sort(List.Distinct(AddedConvertedDate[Converted_Date]), Order.Descending), // 提取全局最新日期和上一日期 MostCurrentDate = List.First(SortedDates), PreviousDate = if List.Count(SortedDates)>=2 then List.Skip(SortedDates,1){0} else null, // 添加全局统一的日期列 AddedMostCurrent = Table.AddColumn(AddedConvertedDate, "MOST_CURRENT_DATE", each MostCurrentDate), AddedPrevious = Table.AddColumn(AddedMostCurrent, "PREVIOUS_DATE", each PreviousDate), // 可选:移除临时转换列 FinalTable = Table.RemoveColumns(AddedPrevious, {"Converted_Date"}), // 可选:把日期转回M/yyyy的文本格式 FormattedTable = Table.TransformColumns(FinalTable, { {"MOST_CURRENT_DATE", each Date.ToText(_, "M/yyyy"), type text}, {"PREVIOUS_DATE", each Date.ToText(_, "M/yyyy"), type text} }) in FormattedTable
场景二:上一日期是最新日期的上个月
如果需要的是最新日期的前一个自然月(比如最新是4/2018,上一日期就是3/2018,不管数据里有没有这个月份),只需要把上面代码里的PreviousDate替换成:
PreviousDate = Date.AddMonths(MostCurrentDate, -1)
最终效果示例
用你提供的样本数据,场景一的输出结果会是:
| Worker | Case | Report_Date | MOST_CURRENT_DATE | PREVIOUS_DATE |
|---|---|---|---|---|
| Tran | 3000 | 1/2018 | 4/2018 | 2/2018 |
| Dhni | 52451 | 4/2018 | 4/2018 | 2/2018 |
| Dhtuni | 39656 | 2/2018 | 4/2018 | 2/2018 |
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

