Power Query中如何将含文本与MMM-YYYY日期的列分为三类
解决Power Query混合文本/日期分类问题
步骤1:添加自定义列处理分类逻辑
在Power Query编辑器中,选中目标列(假设列名为Status_Date),点击「添加列」→「自定义列」,输入以下M代码:
let // 获取当前月份的起始日期,作为判断基准 CurrentMonthStart = Date.StartOfMonth(DateTime.LocalNow()), // 计算未来两个月后的月份起始,用于区分近期和远期 Future2MonthsStart = Date.AddMonths(CurrentMonthStart, 2), // 尝试转换单元格内容为日期(取当月第一天统一判断),转换失败返回null ConvertedDate = try Date.StartOfMonth(Date.FromText([Status_Date], [Format="MMM-yyyy"])) otherwise null, // 按规则判断分类 Category = if [Status_Date] = "Early Term" or [Status_Date] = "Transition" then "当前及未来两个月" else if [Status_Date] = "Unknown" then "远期未来月份(排除未来两个月)" else if ConvertedDate <> null then if ConvertedDate < CurrentMonthStart then "过往月份" else if ConvertedDate < Future2MonthsStart then "当前及未来两个月" else "远期未来月份(排除未来两个月)" else "未分类" // 处理意外的非预期内容 in Category
代码细节说明
try otherwise:专门处理文本单元格转日期的报错问题,转换失败时返回null,避免整列报错中断流程Date.StartOfMonth:把所有日期统一为当月第一天,确保月份判断的准确性(比如不管是Jan-2024的哪一天,都按2024-01-01判断)- 先判断固定文本值,再处理日期内容,逻辑优先级更贴合需求
可选调整:修改时间范围规则
如果需要把“当前及未来两个月”定义为当前月+接下来两个月(共3个月),只需修改Future2MonthsStart的计算:
Future2MonthsStart = Date.AddMonths(CurrentMonthStart, 3)
额外注意点
- 若日期文本存在大小写不一致(比如
JAN-2024),可在Date.FromText中补充文化参数确保转换成功:ConvertedDate = try Date.StartOfMonth(Date.FromText([Status_Date], [Format="MMM-yyyy", Culture="en-US"])) otherwise null - 如有其他自定义文本值,直接在
if判断中补充对应的分类规则即可
内容的提问来源于stack exchange,提问作者yan peng
相关产品推荐
相关产品推荐

