首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Power Query:迭代函数List.Accumulate理解与实战

在PQ中,遍历函数像List.Transform函数,List.TransformMany函数以及LTable.TransformColumns函数等等。这里的List.Accumulate是一个迭代函数,是对一个函数返回迭代,直到得到相应的结果。

官方的解释是:使用accumulator从列表List中的项累积汇总值。可以设置可选的种子参数seed。

说人话:指定一个List列表,一个规则即迭代器和一个初始值,按迭代器规则使用List列表中的元素迭代初如值,返回最后一次迭代结束后的初始值。语法如下:

List.Accumulate ( 指定的List列表as list,初始值 as any,迭代器 as function ) as any

官方解释中,迭代器是一个由两个参数组成的函数,(state,current)=>,但是参数有些长,一般情况下可以简写成(x,y)=>或者其他的单个字母的情况。

List.Accumulate ( 指定的List列表as list,初始值 as any,(x,y)=>        ) as any

x是指初始值,y是指要迭代的List列表; 传递符号后面的就是迭代的方式

一般来说,该函数的第二个参数,即初始值的类型会决定该函数返回结果的类型,在不做任何类型转换的情况下。比如第二个参数是一个数字,那么迭代的结果就是一个数字,如果第二个参数是一个list,那么迭代的结果就是一个list,如果是一个table,那么迭代的结果就是一个taable。

来看一个例子。

这是一个计算0到9的累计的公式。具体解读一下:

指定的List列表为,初始值为0,迭代器为(x,y)=>,迭代的规则为 x+y  .所以有:x表示这里的当前值,即0,y表示指定的列表。准确地来说:List.Accumualte函数在对列表List进行迭代时,为方便讲解,我们将x+y的值记为s.则:

所以最终的结果返回的是45.

这就是整个List.Accumulate迭代的整个过程。在这个过程中,迭代器根据规则迭代List列表后的结果将作为第二次迭代的当前值,直到List列表参数迭代结束,才会返回最后迭代的当前的值。

总结来看,设fx=x+y,上述的过程就是:

处于一直嵌套的过程中。即:

再来看一个例子。

相当于我们把中的每一个元素分成9次,分别使用这个里面的每个元素对{}进行迭代,迭代的规则是x&,说人话就是将List列表中的元素装进初始值{}这个空的容器中。

上述的例子返回了一个值,如果要把上述的例子做成一个List列表的累加的话。公式该如何写?

例1:累计求和

例2:累计连接

例3:批量替换

例4:生成工资条

在讲List.Zip函数的时候,我们使用常规的一个方法生成了关于工资条的方法,但是代码有些长,常规的方法也比较麻烦,这节案例我们使用List.Accumulate函数来制作工资条。

例5:批量匹配求值

让我看看,是哪个小可爱翻到惊喜了~~

小必老师近期新出版的《Excel商务智能:Power Query和Power Pivot数据清洗、建模与分析实战》一书,在上市以来就取得不俗的表现,豆瓣上更是有了9.5分的评分。本书有50+的实战案例,有1G+的随书重难点章节的配套视频。主要讲解Power Query中的M和Power Pivot中的DAX,适用于Excel和Power BI。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230206A00OBP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券