在Excel中我们在做一列数据的累计时会这样写公式:
=SUM(A$1:A1)
固定首行然后下拉实现上面数据的累计。
在Power Query中当然也有实现累计的方法,我们来学习两种方法:
List.Accumulate
List.Accumulate函数是能够实现累计计算的函数,这个函数有三个参数:
第一参数:列表
第二参数:起始值
第三参数:自定义函数
为了实现这种逐行累加的效果,我们要先取出逐行对应的列表,然后计算:
= List.Transform({1..20},(x)=>List.Range(L,0,x))
我们用List.Range函数取出对应的数值列表,因为在实际运算中,不可能是例子中的等差数列,应该是很多不规则数据组成的列表,我们要根据行来返回对应的列表,然后再计算。
= List.Transform({1..20},(z)=>List.Accumulate(List.Range(L,0,z),0,(x,y)=>x+y))
List.Range部分,就是上面说的不断增加元素的列表,从0开始计算,后面的函数部分很容易理解,对于列表中数据进行累计计算。
还有一种使用List.Accumulate实现累计的办法:
= List.Accumulate(L,{},(x,y)=>x&{List.Sum({List.Last(x),y})})
x从一个空列表开始,逐渐增加元素,同时不断从L列表中取出y与x列表的最后的元素求和计算,并把结果添加到x列表中。这就是这个公式的运算过程。
List.Sum+List.Range
通过前面的例子,我们知道只要找到对应的列表,直接求和就能得到累计的结果:
= List.Transform({1..20},(x)=>List.Sum(List.Range(L,0,x)))
这可能是最好理解的累计方法了,对List.Range产生列表进行求和计算,就得到对应行的累计结果。