You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:55:11