Power Query M语言如何更简便生成指定日期区间的连续日期列表
Power Query M 连续日期区间生成代码优化方案
原代码存在两处可优化的冗余点:
- 重复计算了两次
#"Mizan (Banka&Kasa)"[Tarih]字段的最大值,产生不必要的计算开销 - 手动将日期转为数字计算间隔天数的写法,可以用M语言内置的日期间隔函数替代,语义更清晰
可读性优先的优化写法
推荐优先使用这个版本,变量拆分清晰,后续调整逻辑方便,性能也比原代码更好:
let // 提取目标表日期列,提前过滤空值避免计算异常 TargetDateCol = List.RemoveNulls(#"Mizan (Banka&Kasa)"[Tarih]), PeriodStart = List.Min(TargetDateCol), TableMaxDate = List.Max(TargetDateCol), // 取表内最大日期和今日的较大值作为区间终点 PeriodEnd = List.Max({TableMaxDate, Date.From(DateTime.LocalNow())}), // 直接用Duration.Days计算间隔天数,无需手动转数字类型 ContinuousDateList = List.Dates(PeriodStart, Duration.Days(PeriodEnd - PeriodStart) + 1, #duration(1, 0, 0, 0)) in ContinuousDateList
注:如果确认日期列不存在空值,可以直接移除List.RemoveNulls函数。
极致精简写法
如果不需要保留中间变量做后续扩展,可以压缩为单表达式实现,逻辑和原代码完全一致:
= List.Dates(List.Min(#"Mizan (Banka&Kasa)"[Tarih]), Duration.Days(List.Max({List.Max(#"Mizan (Banka&Kasa)"[Tarih]), Date.From(DateTime.LocalNow())}) - List.Min(#"Mizan (Banka&Kasa)"[Tarih])) +1, #duration(1,0,0,0))
这个写法性能和上面的版本没有本质差异,但可读性差,不推荐在生产环境的查询中使用。
内容的提问来源于stack exchange,提问作者Umut K
相关产品推荐
相关产品推荐

