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

如何在Power Query中计算5年与10年移动平均线

在Power BI Power Query中实现分月份的5年/10年移动平均计算

原始数据表格

Date.MonthNameCalendar_YearTotal NumberMoving Average 5 YearMoving Average 10 Year
April2000135
April200176
April200233
April200331
April2004228
April2005200101
April2006350114
April2007126168
April2008102187
April2009126201
April2010333181141
April2011137207161
April2012121165167
April201336164175
April201479151176
April2015272141161
April2016282129168
April201796158161
April201893153158
April2019181164158
April202064185163
April2021144143136
April2022126116137
April2023236122137
August200066
August200183
August2002118
August2003236
August2004117
August200584124
August2006151128
August2007157141
August2008221149
August2009178146
August2010171158141
August2011154176152
August2012267176159
August2013164198174
August2014249187166
August2015149201180
August2016122197186
August2017247190183
August2018160186192
August201973185186
August2020176150176
August2021164156176
August2022275164177
August202352170178

计算逻辑说明

  • 5年移动平均:针对同月份,取当前年份往前推5年的所有数据平均值(如April 2005取2000-2004年的April数据),数据不足5年时留空。
  • 10年移动平均:针对同月份,取当前年份往前推10年的所有数据平均值(如August 2010取2000-2009年的August数据),数据不足10年时留空。

Power Query实现步骤

  1. 将数据导入Power Query,确保列名正确:Date.MonthName、Calendar_Year、Total Number。
  2. 按Date.MonthName分组,对每个分组内的年份按升序排序。
  3. 添加自定义列计算5年移动平均:
    = let
        currentMonth = [Date.MonthName],
        currentYear = [Calendar_Year],
        filteredRows = Table.SelectRows(#"排序后的表", each [Date.MonthName] = currentMonth and [Calendar_Year] >= currentYear - 4 and [Calendar_Year] < currentYear),
        countRows = Table.RowCount(filteredRows)
      in
        if countRows = 5 then Number.Round(List.Average(filteredRows[Total Number]), 0) else null
    
    注:将#"排序后的表"替换为实际排序步骤的名称。
  4. 添加自定义列计算10年移动平均:
    = let
        currentMonth = [Date.MonthName],
        currentYear = [Calendar_Year],
        filteredRows = Table.SelectRows(#"排序后的表", each [Date.MonthName] = currentMonth and [Calendar_Year] >= currentYear - 9 and [Calendar_Year] < currentYear),
        countRows = Table.RowCount(filteredRows)
      in
        if countRows = 10 then Number.Round(List.Average(filteredRows[Total Number]), 0) else null
    
  5. 调整列顺序匹配原始表格结构,最后加载数据到Power BI。

关键说明

  • 代码通过currentYear - 4和currentYear < currentYear筛选前5年数据(如2005年对应2000-2004年),仅当数据量刚好为5条时计算平均值,否则返回null对应空单元格。
  • Number.Round函数用于将平均值取整,匹配原始表格的整数结果。

内容的提问来源于stack exchange,提问作者SJG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:30:07