如何在Power Query M中生成含指定年份完整周数的日历表?
解决方案:在Power Query中生成完整的年份-周数日历表
方法1:硬编码指定年份生成周数表
如果已经明确要覆盖的年份(比如2022、2023),可以直接创建年份列表并生成对应周数:
- 在Power BI中新建空白查询
- 打开高级编辑器,替换默认代码为以下M语言脚本:
let // 定义需要生成的年份列表 TargetYears = {2022, 2023}, // 将年份列表转成表,为每个年份添加1-52周的列表 YearWithWeeks = Table.AddColumn( Table.FromList(TargetYears, Splitter.SplitByNothing(), {"年份"}), "周数", each List.Numbers(1, 52) ), // 展开周数列,把每个年份的周数拆成单独行 FinalCalendar = Table.ExpandListColumn(YearWithWeeks, "周数") in FinalCalendar
方法2:基于现有数据集的年份自动生成
如果现有数据集包含需要覆盖的年份(即使周数不全),可以提取其中的唯一年份再生成对应周数:
假设你的原始数据集名为原始数据,且包含年份字段,使用以下代码:
let // 提取原始数据里的所有唯一年份 UniqueYears = List.Distinct(原始数据[年份]), // 转成表并添加周数列 YearTable = Table.FromList(UniqueYears, Splitter.SplitByNothing(), {"年份"}), YearWithWeeks = Table.AddColumn( YearTable, "周数", each List.Numbers(1, 52) ), // 展开周数得到完整日历表 FinalCalendar = Table.ExpandListColumn(YearWithWeeks, "周数") in FinalCalendar
进阶:适配实际年份的周数(含53周的情况)
部分年份会有53周(比如2020年),可以通过判断年份最后一天的周数来动态调整生成的周数数量:
let TargetYears = {2022, 2023}, YearWithWeeks = Table.AddColumn( Table.FromList(TargetYears, Splitter.SplitByNothing(), {"年份"}), "周数", each let LastDay = #date([年份], 12, 31), TotalWeeks = Date.WeekOfYear(LastDay) in List.Numbers(1, TotalWeeks) ), FinalCalendar = Table.ExpandListColumn(YearWithWeeks, "周数") in FinalCalendar
内容的提问来源于stack exchange,提问作者db_dora_1234
相关产品推荐
相关产品推荐

