Power Query如何使用循环遍历?

我们知道一般编程语言,循环遍历、条件判断都是必不可少的,那么在PQ中如何实现循环遍历的需求呢?毕竟M也算是一种函数式编程!
在PQ中list更像一般语言中的数组,所以我们就拿list来说!
在PQ中,我们想要实现循环,也就是一般语言中的for或者foreach,一般使用List.Transform,看名字大概猜出对每个元素进行转换!
单循环-List.Transform
比如,最简单的,1到10,每个数乘以2,怎么处理?
= List.Transform({1..10},each _*2)
此时的下划线表示列表中当前处理的元素!
当然,我们也可以实现稍微复杂一点的需求,我们需要三个结果,一个是自己,一个是乘以10后的数值,一个是1累加到当前值!
= List.Transform({1..10},each [本身 = _,乘以10 = _*10,累加到当前值=List.Sum({1.._})])
本身是3,乘以10=30,累加到当前是相当于1+2+3 = 6
由于三大容器可以互相嵌套,所以我们可以根据需求构建出自己想要的结果!
如果你想实现双循环,当然可以使用Transform嵌套,但是不够优雅,PQ也为我们提供了另外一个函数,List.TransformMany,这个函数有点难度,我们直接来看一个案例!
双循环-List.TransformMany
小区一个是10栋楼,每栋15层,现在我们要把所有的几栋几层列出来!
= List.TransformMany({1..10},each {1..15},(x,y)=>Text.Format("#{0}栋#{1}层",{x,y}))
第二和第三参数都是一个函数,第三参数中的x表示x中的元素,y表示第二参数的元素!
当然我们也可以使用TransformMany来解决上面的案例!
只是我们这一次使用List来表示!
如果我们想要实现迭代处理,PQ也有对应的函数,List.Accumulate!
这个函数的非常好用,但是实战一般有点难度!
迭代-List.Accumulate
简单的就是官方的案例,1累加到10
List.Accumulate(需要处理的List,初始值,处理)

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

但是这完全看不出他的强大,所以我们举一个实际点案例,把数据按照大小分组,小于20的分到一组,大于等于20的分到一组
待处理数据:10,24,22,39,80,12,5
=Table.FromColumns(List.Accumulate({10,24,22,39,80,12,5},{{},{}},(x,y)=> if y <20 then {x{0}&{y},x{1}} else {x{0},x{1}&{y}}),{"小于20","大于等于20"})
重点是函数的第二参数类型是any,也就是说是任意类型,可以是文本、数值、列表、记录、表格或者容器嵌套都可以,所以我们可以把各种处理和过渡需要的参数定义在其中!
还有类似于While循环的List.Generate
Do While循环-List.Generate
初始值10,然后判断是否大于0,如果满足条件就执行第三参数,数值-1
直到不满足条件停止直接,把过程输出出来,第四参数是空值显示的结果!
= List.Generate(()=>10,(x)=>x>0,(x)=>x-1,(x)=>Text.Format("倒数#{0}项",{x}))
今天主要就是带大家稍微了解一下,M其实是一门函数式编程,编程必备的条件判断、循环、字典、数组等都具备!这给他带来了更多的可能和发展空间!

本文由“壹伴编辑器”提供技术支持

(0)

相关推荐

  • 惊呆必藏!1个实际工作问题,15种解法,练好22个函数!

    一直以来,我都在设想找一些相对简单而又能多练几个函数的案例,当在群里看到本文中需求的时候,突然脑洞大开,基于这个问题,将Power Query的List类和Text类常用函数给撸了一遍,写了15种解法 ...

  • 来个Power Query小题练练思路!

    需求:把数据展开,并从小到大排序! "-"表示数据数据区间,比如20-30,表示20到30 这11个数字! 第一步:按照逗号分割 在Excel工作表函数中没有文本分割函数,处理文本 ...

  • 批量替换 | 多行多列不同字符替换为同一字符

    - 问题 - 前些日子,发布了文章<10万行30列数据乘上系数,能快一些吗?含"函数作为参数"的触类旁通方法>,结果有朋友留言问,是否能实现多个旧值转换为同1个新值,在 ...

  • 看完这道题,你才能领略Python的魅力!

    近日浏览LeetCode,发现了一道很有意思的小题目.当我尝试用Python解答的时候,居然动用了集合.map函数.zip函数.lambda函数.sorted函数,调试过程还涉及到了迭代器.生成器.列 ...

  • 先分解后合体!一个看上去超复杂的公式是怎么炼成的!

    最近遇到个从系统中导出的报表,将不同时间段的天成本分别作了汇总,即多个时间段,对应多个天成本,如下图所示: 其中多个时间段用逗号分隔,每一个时间段斜杠分割起止,而天成本用斜杠分割. 为了便于后其他的分 ...

  • PQ-M及函数:将Excel的列标转成数字

    小勤:在<单个格式表转换>里提到可以用配置映射表的方式来实现表格数据的提取,比如你以前用VBA程序导数据的那个: 但要在PQ里根据源表内容的位置提取数据的话,得首先知道Excel里表示的位 ...

  • PQ:又双叒叕粗错了!什么叫“枚举中用于完成操作的元素过多”?

    小勤:这是什么鬼啊?什么叫"枚举中用于完成操作的元素过多"? 大海:你透视的值列有多个值吧?比如同一个"生产中心"里有多个人. 小勤:嗯,的确是呢.源数据是这样 ...

  • 70+篇PQ/PP/PBI文章视频,除了链接,竟然还有内容要点!

    最近一直在尝试对以往所写文章或所录视频内容进行梳理,考虑到大家在查找文章时可能存在的麻烦,于是将文章或视频的内容要点进行较全面的罗列.目前已完成以下70+篇文章(部分视频)的整理,后续继续努力,争取把 ...

  • 复杂的事情简单做:用PQ实现是否包含某文本的匹配查询

    复杂的事情简单做:用PQ实现是否包含某文本的匹配查询

  • Power Query里的循环引用

    小勤:Power Query怎么也有"循环引用"? 大海:有互相引用的地方就可能有循环引用啊.你这里是不是在"公众号"的表里引用了"年龄"表 ...

  • 使用power query,批量添加前缀和后缀

    生命中对自己最好的爱是学会肯定自己.我们不懂得肯定自己,我们就会认为自己很糟糕.人生的重塑更重要是来自内在意识的重塑.当我们发自内心地认为自己糟糕的时候,我们就会变得随意与随波逐流.学会肯定自己,我们 ...

  • 通过Power Query汇总多个工作表的数据

    版权所有 转载须经Excel技巧网/Office学吧允许 [ Excel ]:从身份证号码提取生日

  • 这个需求一对多查找和Power Query都用上了

    经常遇到类似于竖向转横向,或者说横向展开的问题,这里干脆写一篇,详细说一下! 网友的源需求: 问题在年份数值这列没有填充,所以感觉很难,假设我们先填充上,那么会变得轻松而简单! 第一步:先把坑填上 本 ...

  • Power Query For Excel 让工作化繁为简

    曾贤志老师的新书<Power Query For Excel 让工作化繁为简>3月出版了,Power Query是Excel 中的新技术,2016版本增加了Power Query功能.Po ...

  • 用Power Query实现多表合并

    本文介绍Power Query批量合并,要求Excel 2016版本或Office 365版本. 按照数据源结构和要求效果,多表合并可以分为以下几种情况: 单工作簿内多张工作表多表合并 多工作簿单张工 ...

  • 多表合并(Power Query、SQL、函数与公式、VBA四种方法)

    工作中有时候需要将多张工作表合并到一张工作表,本文总结了四种方法:Power Query 工具.SQL.函数与公式.VBA,四种方法难度依次递增. 方法一:借助Power Query工具 史上多表合并 ...

  • Excel教程:Power Query,万能的批量数据替换技巧!

    每天一点小技能 职场打怪不得怂 编按:说到Excel的替换操作,大家首先想到的一定是SUBSTITUTE和REPLACE函数.可是,今天需要处理的替换问题,这两个函数也束手无策,那要怎么做呢?下面,小 ...

  • Power Query是什么?怎么学?

    Power Query(以下简称PQ)虽然出来有一段时间了,好用程度也是超出了我的预期,但是目前普及度还是不高,可能是人们都有点抵触新事物,又或者是新事物推广开都需要一定的时间吧!但是不管怎么样,我还 ...