需求也比较简单,如下图所示:
需求
对每一天的前三天(包含当天)对应的数值求和,比如8月4日前三天(2-4日)数值求和结果为14,8月5日前三天(3-5日)数值求和结果为17,8月6日前三天(4-6日)数值求和结果为22……以此类推。
所以处理思路也是一样的。
首先添加索引列
添加索引列然后新增列来获取处理结果
新增列这里有两种思路:
一种是直接获取每一行的记录, 然后把它们放到一个list中用List.Sum求和;
另一种方法更加“优雅”一些,通过动态获取区间,然后再放到List.Sum中求和。
方法一:获取所有行记录
= Table.AddColumn(已添加自定义, "连续3行求和", each
if
[索引]>1
then
List.Sum({已添加自定义[数值]{[索引]-2},已添加自定义[数值]{[索引]-1},已添加自定义[数值]{[索引]}})
else
null)
List.Sum函数是对计算范围内的数值列表【也就是数值列的一个片段】进行求和。
接下来要选取符合要求的数值列表。
那么怎么选择呢?就是在【数值】列中,选择当前行索引号减去2所得到的索引值所对应的行,从它开始,在【数值】列中往后选3个值。
由于第一二行不足3行,所以没法计算结果,用if来判断索引值是否大于1(因为索引是从0开始),如果不是则设置为null值。
方法二:动态获取求和区间
只需要把方法一中List.Sum那一行换成如下的即可:
List.Sum(List.Range(更改的类型[数值],[索引]-2,3))
这种方法要简洁、“优雅”得多。甚至可以把它再进一步优化为:
List.Sum(List.Range(更改的类型[数值],[索引]-(n-1),n))
其中的n就是每一个求和区间的长度:如果每3行求和,就是我们的例子;如果每五行求和,也同样适用。这样就把整个求和行数参数化了。
最后得到的结果如下:
处理结果