PQ实战 | 同类项的合并与拆分

今天主要是通过一个常见的案例来熟悉一下Power Query中的文本处理

直接看一下

需求说明:同类项的合并与拆分
实现的方式有很多种,之前写过专题,链接放文末有需要全面了解的,扩展阅读!
本篇主要还是介绍Power Query中如何实现,会用到很多常见的文本处理的M方式,有兴趣的同学一定要好好阅读。
演示方式:动画(Gif),为了更直观的看到,小编是如何写的全过程!
我们先说合并如何处理,非常常见的需求,也就是从左->右
合并同类项
加载数据到PQ编辑器
【数据】-> 【自表格/区域】,一般会出现提示,创建表格,点击确定,如果第一行是标题,勾选首行标题即可
写合并的M函数
= Table.Group(源,"类别",{"合并",each  Text.Combine(_[ 名称],"/")})
M函数整体比较简单,这也是我们为什么推荐大家慢慢去学习PQ的原因之一!具体我们还是来带着大家一起学习一下:
PQ中的函数叫做M函数,是一种函数式编程,他的命名方式和Excel不同
严格区分大小写:每个单词的首字母全部大写,如果写成小写报错
有编程基础的同学应该知道,这种叫做帕斯卡命名法,也叫做大驼峰命名法
表示方式:类别.函数名的方式。
整个需求的实现,我们使用到两个函数:Table.GroupText.Combine
我们就本次说引到的参数做一些说明,具体还是需要大家去详细学习的
Table.Group
Table.Group 函数:必学函数之一
官方语法:
Table.Group (
table as table, key as any,
aggregatedColumns as list,
optional groupKind as nullable GroupKind. Type,
optional comparer as nullable function
) as table
翻译一下就是:
Table.Group(表,分组字段,分组聚合,分组模式,比较形式)
我估计还是看不懂,后面两个参数属于可选字段,进阶阶段我们会用到,目前我们就说说前三参数!
Table.Group(表,分组字段,分组聚合)
第一参数:需要分表的表(table)
第二参数:分组依据的字段名称,如果只有一个我们直接使用文本的表示方式,比如案例中的"类别",但是如果按照多个字段分组就需要使用list,比如{"大类","名称"} 就表示按照大类和名称两个字段为依据分组!
第三参数:分组后新的字段名称和处理表达式组成,{标题名称,聚合处理}
如果有多个,需要再嵌套一组大括号{{标题1,聚合1},{标题2,聚合处理2},……}
以上就是我们对Table.Group大体语言的介绍,如果是0基础可能要先了解一下什么是 table、record 和list(三大容器)
Text.Combine
Text.Combine比较简单,大类是文本类,Combine直接翻译就是合并
看一个示例就能明白:
语法:Text.Combine(需要合并的文本列表,分隔符)
分隔符参数可以不写,默认就是直接合并
比较简单,不再啰嗦!
按分隔符拆分
想到拆分,英文单词首先想到应该就是Split,如果你学习其他语言或者VBA,应该都不陌生,在PQ中也是使用Split,并且是文本处理,所以应该是Text.Split来拆分处理!
下面我们就来做一个逆向操作,如何拆分!
= Table.ExpandListColumn(Table.TransformColumns(自定义1,{{"合并", each Text.Split(_,"/")}}),"合并")
我们也来解释一下其中的含义,核心就是Text.Split语法和Text.Combine一样,但是他们干的完全相反的事情。
然后就是第一个函数 :Table.TransformColumns
首先是table类函数,Transform在PQ中非常常见,意思是转换,翻译过来就是转换列,他的语法也简单,
语法:
Table.TransformColumns(表,{{需要转换的字段名1,转换逻辑1},{需要转换的字段名2,转换逻辑2})
案例中只有一组,就是拆分合并列!
最后是 Table.ExpandListColumn,翻译一下就是按哪一列list展开
list都是行拓展展开,record是列,table是行列展开,这个大家未来都会学习到!本案例中,是把处理后的表,按照合并字段行上展开,拆分出来的有几个就扩展几行!
语法:Table.ExpandListColumn(表,需要展开的列名)
(0)

相关推荐