Power Query中批量处理操作(3)

2020-03-23 17:43:12 浏览数 (1)

(一) List.Accumulate

List.Accumulate(list as list, seed as any, accumulator as function) as any

第1参数是需要批量运算的列表(循环次数也是依据项目数);第2参数是初始值及计算后的数据(在第一次运算前需要给赋予一个初始值用于运算,第一次运算完后则赋值为代表运算后结果);第3参数是运算的函数。由至少2个变量组成,1个是第2参数,1个是需要处理的1参数循环列表。

例:

List.Accumulate({1..3},0,(x,y)=>x)=0

List.Accumulate({1..3},0,(x,y)=>y)=3

解释:x相当于第2参数,格式也是和第2参数相同。y代表的需循环的列表,返回的是循环处理最后一项的返回的值。因为这里第3参数没做处理,所以返回的也就是y的最后一项的值。

List.Accumulate({1..3},0,(x,y)=>x y)

=List.Accumulate({1..3},0,(初始值,列表中的值)=>初始值 列表中的值)

=((0 1) 2) 3=6

解释:x代表第2参数的初始赋值,y代表需要处理的循环列表,也就是参数1的数据{1..3}。变量名称可以自己取,但是需注意位置。

第1次运算前,第2参数被赋值为0,所以第3参数计算结果为0 列表中的第一项1=0 1=1

第2次运算时,第2参数被赋值为上一次的运算结果1,所以第3参数计算结果为1 列表中的第二项2=1 2=3

第3次运行时,第2参数被赋值为上一次的运算结果3,所以第3参数结算结果为3 3=6

最终返回列表项目最后一个运算完成后的结果。一共运行的次数为列表1中的项目数,次项目数一共为3个,也就是1,2,3的值。

List.Accumulate({List.Sum},{1..3},(x,y)=>y(x))

=List.Sum({1..3})=6

解释:第1参数是列表,但是列表里面的值可以任意,所以如果需要在列表里面的值是函数则需要在外面套一层{}改变其表面格式。y代表的是第1参数列表内每一个循环值,在这里显示的是公式List.Sum。所以y(x)表示的就是List.Sum({1..3})=6

List.Accumulate({1..5},1,(x,y)=>y*x)=120

解释:这个是典型的阶乘计算,5!=((((1*1)*2)*3)*4)*5=120。得到一个结果作为值再做下一步运算。

List.Accumulate({"a".."c"},"",(x,y)=>x&y)=abc

解释:请注意第2参数为""空文本而不是null空值。 第一次运算是""&a,运算后的结果="a"

第二次的运算是"a"&"b",运算后的结果是="ab"

第三次的运算时"ab"&"c",运算后的结果是="abc"

此时第1参数项目里的内容全部运行完毕,返回最后的运算结果也就是"abc"。

List.Accumulate({"a".."z"},"abc123aef",(x,y)=>Text.Replace(x,y,"z"))=zzz123zzz

解释:此公式的作用是把小写英文字符全部替换成z。

第一次运算是Text.Repeat("abc123aef","a","z"),用z替换a,处理后的结果是“zbc123zef”

第二次运算是Text.Repear("zbc123def","b","z"),用z替换b,处理后的结果是"zzc123zef"

以此类推把英文小写字符全部替换完成。

List.Accumulate({1,2,3},"a",(x,y)=>x&"b")

=(("a"&"b")&"b")&"b"

="abbb"

解释:因为第3参数的函数中y不涉及到计算,所以y的值也就是列表中的值不做处理,但是列表中的项目是循环次数的依据。所以需要循环3次,返回最终的结果。

0 人点赞