Power BI中按日求和后计算近30天均值的问题求助
解决方案:按日期汇总后计算滚动N天平均值
第一步:计算每日总和
先把原始数据(日期、账户、数值)按日期汇总,得到每日的数值总和,有两种常用方法:
方法1:数据透视表(Pivot Table)
- 选中原始数据区域(A:C列)
- 插入数据透视表,将「日期」拖到行区域,「数值」拖到值区域并设置为「求和」
- 得到的结果就是每日唯一的总和(比如12/26/2023的总和为497+328+398=1223)
方法2:公式计算(无需透视表)
假设原始数据日期在A列,数值在C列,在空白列(比如E列)输入不重复的日期,在F列输入公式计算对应日期的总和:
=SUMIFS($C:$C,$A:$A,E2)
下拉填充即可得到所有日期的每日总和。
第二步:计算滚动N天平均值(以30天为例,示例用3天)
假设汇总后的日期在E列,每日总和在F列,在G列计算包含当日在内的最近30天的平均值:
通用公式(适配非连续日期)
因为你的日期可能不是连续的(比如示例中跳过了部分日期),必须用日期范围筛选计算,不能用固定偏移:
=IF(COUNTIFS($E:$E,">="&E2-29,$E:$E,"<="&E2)<30,"",AVERAGEIFS($F:$F,$E:$E,">="&E2-29,$E:$E,"<="&E2))
参数说明:
E2-29:代表当日往前推29天(加上当日共30天),如果是示例中的3天需求,改成E2-2即可COUNTIFS:判断该日期范围内是否有至少30条(或3条)有效数据,不足则留空(和你的示例格式一致)AVERAGEIFS:筛选出符合日期范围的每日总和,计算平均值
Excel 365/Google Sheets 简化公式(动态数组)
如果使用支持动态数组的版本,可用FILTER更直观实现:
=IFERROR(IF(ROWS(FILTER($F:$F,$E:$E>=E2-29,$E:$E<=E2))<30,"",AVERAGE(FILTER($F:$F,$E:$E>=E2-29,$E:$E<=E2))),"")
关键注意事项
- 日期格式验证:确保E列的日期是真正的日期格式(不是文本),可通过右键设置单元格格式为「日期」,或用
ISDATE(E2)验证,否则日期加减运算会失效 - 避免重复数据:必须先将同一日期的多账户数值汇总为单条每日总和,否则公式会把每个账户的数值单独计入平均,导致结果错误
- 滚动天数调整:如果需要其他天数(比如7天),只需把公式中的
29改成对应数值(7天则改6)
内容的提问来源于stack exchange,提问作者bigjdawg43
相关产品推荐
相关产品推荐

