如何在计算列中按生产者实现生产速率与天数乘积的累计求和?
按生产者分组计算累计生产总和的公式调整方案
问题背景
现有生产数据表格如下:
| Date | Producer | Production rate(unit per day) | Number of Days |
|---|---|---|---|
| 16/1/2023 | 'A' | 1 | 31 |
| 16/1/2023 | 'B' | 5 | 31 |
| 16/1/2023 | 'C' | 10 | 31 |
| 16/2/2023 | 'A' | 2 | 28 |
| 16/2/2023 | 'B' | 6 | 28 |
| 16/2/2023 | 'C' | 11 | 28 |
| 16/3/2023 | 'A' | 3 | 31 |
| 16/3/2023 | 'B' | 7 | 31 |
| 16/3/2023 | 'C' | 12 | 31 |
需求为:为每个生产者计算Production rate(unit per day)与Number of Days乘积的累计总和,最终期望表格如下:
| Date | Producer | Monthly Production rate(unit per day) | Number of Days | CumSum |
|---|---|---|---|---|
| 16/1/2023 | 'A' | 1 | 31 | 31 |
| 16/1/2023 | 'B' | 5 | 31 | 155 |
| 16/1/2023 | 'C' | 10 | 31 | 310 |
| 16/2/2023 | 'A' | 2 | 28 | 87 |
| 16/2/2023 | 'B' | 6 | 28 | 323 |
| 16/2/2023 | 'C' | 11 | 28 | 618 |
| 16/3/2023 | 'A' | 3 | 31 | 180 |
| 16/3/2023 | 'B' | 7 | 31 | 540 |
| 16/3/2023 | 'C' | 12 | 31 | 990 |
当前使用公式:Sum([Number of Days] * [Monthly Production rate(unit per day)]) OVER (AllPrevious([Date])),无法实现按Producer分组累计,需调整公式将Producer纳入计算逻辑。
解决方案
要实现按生产者分组累计,需在窗口函数中添加**分区(Partition By)**逻辑,指定按Producer分组,同时保留按Date的时间顺序累计。调整后的公式如下:
Sum([Number of Days] * [Monthly Production rate(unit per day)]) OVER ( PARTITION BY [Producer] ORDER BY [Date] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )
公式说明:
PARTITION BY [Producer]:将数据按生产者分组,每个生产者单独计算累计值,互不干扰。ORDER BY [Date]:确保每个生产者分组内的数据按日期顺序进行累计。ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:明确累计范围为当前分组的第一行到当前行,实现逐步累计的效果(部分工具中AllPrevious([Date])可替代此段,结合分区后同样生效)。
若你的工具支持AllPrevious语法,也可简化为:
Sum([Number of Days] * [Monthly Production rate(unit per day)]) OVER ( PARTITION BY [Producer] AllPrevious([Date]) )
内容的提问来源于Stack Exchange,提问作者Amin Noor
相关产品推荐
相关产品推荐

