Power Query:获取最大年份最大周数并实现近52周筛选
Power Query实现近52周数据筛选的解决方案
一、修复你当前的代码(动态获取最大年份的最大周数)
你的核心问题是硬编码了周数阈值,我们可以先动态提取最大年份对应的最大周数,再做判断:
let Source = 你的数据源, // 替换成你的实际数据源步骤 #"Changed Type" = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}, {"Week", Int64.Type}}), // 提取数据中的最大年份 maxYear = List.Max(#"Changed Type"[Year]), // 提取最大年份对应的最大周数 maxWeekInMaxYear = List.Max(Table.SelectRows(#"Changed Type", each [Year] = maxYear)[Week]), // 添加「近52周」判断列 #"Added 近52周列" = Table.AddColumn(#"Changed Type", "近52周", each if [Year] = maxYear then true else if [Year] = maxYear - 1 and [Week] >= (maxWeekInMaxYear + 1) then true else false ) in #"Added 近52周列"
二、更优的日期判断方案(避免周数跨年计算误差)
直接基于年周数值判断可能会因为周定义规则(比如ISO周 vs 自定义周)出现误差,建议把年周转换为日期后再做区间判断,逻辑更准确:
let Source = 你的数据源, // 替换成你的实际数据源步骤 #"Changed Type" = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}, {"Week", Int64.Type}}), // 将年周转换为对应周的结束日期(使用ISO周规则,返回该周周日) #"Added 周结束日期" = Table.AddColumn(#"Changed Type", "周结束日期", each Date.FromISOWeek([Year], [Week])), // 获取数据中最新的周结束日期 latestWeekDate = List.Max(#"Added 周结束日期"), // 计算52周前的日期 52WeeksAgo = Date.AddWeeks(latestWeekDate, -52), // 添加「近52周」判断列 #"Added 近52周列" = Table.AddColumn(#"Added 周结束日期", "近52周", each [周结束日期] >= 52WeeksAgo), // 可选:删除辅助的「周结束日期」列 #"Removed Helper Column" = Table.RemoveColumns(#"Added 近52周列",{"周结束日期"}) in #"Removed Helper Column"
说明
- 第一种方案直接基于你的原有逻辑优化,适合周规则明确且固定的场景;
- 第二种方案通过日期转换规避周数跨年的计算问题,兼容性更强,推荐使用;
- 两种方案都支持50万条数据的高效处理,Power Query会自动做列级优化,无需担心性能问题。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

