前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Power Query中如何把多列数据合并?升级篇

Power Query中如何把多列数据合并?升级篇

作者头像
逍遥之
发布于 2020-03-23 10:35:56
发布于 2020-03-23 10:35:56
7.5K01
代码可运行
举报
文章被收录于专栏:数据技巧数据技巧
运行总次数:1
代码可运行

之前我们了解到了如何把2列数据进行合并的基本操作,Power Query中如何把多列数据合并?也就是把多个字段进行组合并转成表。那如果这类的数据很多,如何批量转换呢?我们需要把转换的这一部分做成循环的函数即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
多列组合=(x)=>
Table.Combine(List.Transform({1..x}, 
             each Table.FromColumns(
                                    List.Range(字段数据列表,0,1)&
                                    List.Range(字段数据列表,(_*3-3)+1,3)
                                   )
                             )          
             )

这个函数是在当前查询功能中进行的书写,但是实际我们在平时想要调用的时候,还有很多需要进一步的进行修改及优化。

1. 生成一个表格参数变量

生成这个参数变量是为了我们之后可以在直接调用来处理同类表格。

我们了解到在代码中的字段数据列表实际上是个已经经过Table.ToColumns处理过的一个列表嵌套列表格式。所以我们在优化代码的时候可以把这一步处理的过程直接作为自定义函数的部分流程。同时我们在这个里面直接把函数的参数数量及类型给固定住。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let
多列组合=(需要操作的表 as table, x as number) as table=>
Table.Combine(List.Transform({1..x}, 
             each Table.FromColumns(
                                    List.Range( Table.ToColumns(需要操作的表),0,1)&
                                    List.Range( Table.ToColumns(需要操作的表),(_*3-3)+1,3)
                                   )
                             )          
             )
in
多列组合
2. 生成固定列变量

添加固定列终点变量,可以用于固定列的选择。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let
多列组合=(需要操作的表 as table, x as number, optional 固定列终点 as number) as table=>

Table.Combine(List.Transform({1..x}, 
             each Table.FromColumns(
                                    List.Range( Table.ToColumns(需要操作的表),0,固定列终点)&
                                    List.Range( Table.ToColumns(需要操作的表),(_*3-3)+1,3)
                                   )
                             )          
             )
in
多列组合

解释:这里我们把固定列从第1列开始,往后延伸,例如输入参数2代表的是从第一列开始,连续2列作为固定列。

3. 确定终点的默认值

既然这个变量是作为可选变量,那我们要给予一个默认值,这样才不会让程序出现错误。

我们设置的默认值为第一列作为固定标题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let
多列组合=(需要操作的表 as table, x as number, optional 固定列终点 as number) as table=>
Table.Combine(List.Transform({1..x}, 
             each Table.FromColumns(
                                    List.Range( Table.ToColumns(需要操作的表),0, 
                                                if 固定列终点=null then 1 else 固定列终点
                                               )&
                                    List.Range( Table.ToColumns(需要操作的表),(_*3-3)+1,3)
                                   )
                             )          
             )
in
多列组合

解释:通过if…then…else语句,我们给固定列终点进行一个判断,如果为空值则给与一个默认值1,也就是从0开始的1列,也就是第一列。

4. 确定需循环的列数

还有一个需要作为变量的,也就是确定是多少列进行转换合并。我们上面的例子中是以每3列进行合并,但是我们要做为一个能灵活使用的函数,更多的变量能让我们更方便的使用,适合更多的场景。

这里我们设置成为变量y。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let
多列组合=(需要操作的表 as table, x as number, y as number, optional 固定列终点 as number) as table=>
Table.Combine(List.Transform({1..x}, 
             each Table.FromColumns(
                                    List.Range( Table.ToColumns(需要操作的表),0, 
                                                if 固定列终点=null then 1 else 固定列终点
                                               )&
                                    List.Range( Table.ToColumns(需要操作的表),(_-1)*y+固定列终点),y)
                                   )
                             )          
             )
in
多列组合

解释:其中需要注意的是(_-1)*y+固定列终点这个写法。这个是判断合并数据起始位置的提取。_相当于x的需要处理循环的次数,y相当于需要转换的列数。

提取的次数

X值

Y值

固定列终点

提取的位置

1

1

3

1

1

2

2

3

1

4

3

3

3

1

7

5. 添加函数使用备注

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let
多列组合=(需要操作的表 as table, x as number, y as number, optional 固定列终点 as number) as table=>
Table.Combine(List.Transform({1..x}, 
             each Table.FromColumns(
                                    List.Range( Table.ToColumns(需要操作的表),0,
                                                if 固定列终点=null then 1 else 固定列终点                                                 
                                               )&
                                    List.Range( Table.ToColumns(需要操作的表),((_-1)*y+固定列终点),y)
                                   )
                             )          
             ),
元数据=[Documentation.Name="批量多列合并",
       Documentation.Description="可以把多列相同的数据合并到一起。
第1参数是需要操作的表,第2参数x代表的是循环几次,第3参数代表的是多少列循环,第4参数是固定标题的结束位置",
       Documentation.Examples={[Description="第1列为固定列,每3列进行合并存放,一共循环2次",
                             Code="批量多列合并(源,2,3,1)",
                             Result="  "]
                              }
                              ]
in
Value.ReplaceType(多列组合,Value.Type(多列组合) meta 元数据)

这样我们就做好了一个可以适应大部分多列数据合并的自定义函数。

我们可以再来尝试下不同的数据表格来使用此函数的效果。

例1:

像这种固定列有3列,数据列是3列为一组,一共转换3次(3组同类数据)进行组合。结果如下图

因为我们可以直接调用我们之前的自定义函数。

批量多列合并(源,3,3,3)

解释:批量多列合并,这个是自定义查询的函数名称,源代表的是需处理的数据表,第2参数的3代表需要循环处理的次数,第3参数的3代表需要合并数据的列数,第4参数的3代表保留前3列作为固定列。

例2:

固定列是2列,循环5次,数据列也是2列。使用函数后获得的效果。

批量多列合并(源,5,2,2)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据技巧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Power Query中如何把多列数据合并?
解释:第一个List.Range目的是为了固定班级字段;第2个List.Range是为了提取第一组的数据。然后和2个列表进行组合并转成Table格式。
逍遥之
2020/03/23
4.8K0
多列数据转规范明细问题的4种解法!
昨天,视频交流群里有朋友在问,类似这个要将多列数据规范化问题,用Power Query怎么处理:
大海Power
2021/08/30
7740
Power Query如何整理蛇形表格?
数据源是由固定数据和内容数据组合而成。前面4行是固定数据列,后面的则为每2行为一组数据。
逍遥之
2020/03/24
1.1K0
Power Query如何整理蛇形表格?
PQ案例——旅行社日期行程表
各个团最后一天日期 例如:2016/1/6日有一个2日团队,所以团队最后一个行程日期为2016/1/6+1=2016/1/7
逍遥之
2020/03/24
1K0
PQ案例——旅行社日期行程表
案例分享:义乌房屋租赁市场分析(4)
例如我们在获得标题数据后,我们发现我们需要提取的完整数据是在">"和"<"两个分隔符之间的数据,那我们可以依旧使用文本提取公式Text.BetweenDelimiters来进行操作,但是这里是列表格式,我们需要进行批量操作的话则还需使用List.Transform函数来处理。也就是在我们已经提取完数据后再外面嵌套个List.Transform公式。
逍遥之
2020/03/23
6060
如何批量对每一行或者每一列进行排序?
先上效果图。 (一) 批量针对每一行排序 1. 把每一行转换成列表 函数:Table.ToRows 2. 针对每一个行生成的列表进行排序 函数:List.Transform,List.Sort 3.
逍遥之
2020/03/23
3.3K0
Power Query整理图片识别出来的数据
我们在使用图片识别文字时常常会出现识别出来的文字是这样的,如果识别出来是这样的东西,它们的数据图片中是4列的,识别变成文字后是一列的:
哆哆Excel
2022/10/31
1.7K0
Power Pivot中忽略维度筛选函数
忽略指定过滤器后进行计算。 之前这个使用All函数生成忽略学科教师平均分的度量值,如果用AllExpect函数则可以写成
逍遥之
2020/03/20
8.4K0
Power Pivot中忽略维度筛选函数
Power Query和Power Pivot中如何实现卡迪尔积?
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。简单来说就是2组数据互相交集。
逍遥之
2020/03/24
1.8K0
如何在Power Query中批量修改标题?
如果要更换标题需要涉及到的函数是Table.RenameColumns;获取标题的函数Table.ColumnNames。
逍遥之
2020/03/24
3.1K0
如何在Power Query中批量修改标题?
Power Query 系列 (06) - M 语言结构化数据类型
本篇介绍 Power Query M 语言的三种结构化类型(或称为容器类型):List、Record 和 Table,它们是 Power Query 数据处理的核心。了解本篇三种容器类型后,应该能大体看懂查询编辑器和高级编辑器中的代码逻辑。
StoneWM
2019/12/13
1.8K0
PQ-批量“替换值”一次完成多个数值的“替换“
= List.ReplaceMatchingItems({1..10},{{1,"a"},{3,"c"}})
哆哆Excel
2022/10/31
2.4K0
如何利用Power Query实现错位行的标题提升?
因为里面涉及列中套列,所以使用List.Skip的话是针对需要处理列里面的明细列进行。这里会用到List{}的方式进行定位,通过List.Transform来进行循环。因为这里是循环3次,而且是从0开始,也就是0-2定位列表里的内容。
逍遥之
2020/03/24
3K0
如何利用Power Query实现错位行的标题提升?
去你的”用函数,不允许增加辅助列“!
经常看到有人出一些Excel的题,要求用公式解,然后注明一句:用函数,不允许增加辅助列!比如这种:
大海Power
2021/08/30
7610
Power Query中批量处理操作(1)
List.Transform(list as list, transform as function) as list
逍遥之
2020/03/23
1.2K0
Power Query中批量处理操作(2)
List.TransformMany(list as list, collectionTransform as function, resultTransfrom as function)as list
逍遥之
2020/03/23
6990
如何在Power Query中获取数据——表格篇(4)
Table.Min(table as table, comparisonCriteria as any, optional default as any) as any
逍遥之
2020/03/23
2.5K0
如何在Power Query中提取数据?——文本篇
平时我们经常用到需要根据一定的需求在数据中把符合需求的数据提取出来,那我们看下在Power Query中是如何进行操作的。
逍遥之
2020/03/23
5.5K0
多文件数据横向汇总,怎么整?| Power Query实战
最近遇到一位朋友提问:怎么将多个文本文件(据说100多份)按列(横向)汇总?经过详细了解,需求如下图所示:
大海Power
2023/02/06
1.6K0
怎么将多行多列的数据变成一列?4个解法。
- 问题 - 怎么将这个多行多列的数据 变成一列? - 1 - 不需保持原排序 选中所有列 逆透视,一步搞定 - 2 - 保持原排序:操作法一 思路直接,为保排序,操作麻烦 2.1 添加索引列 2.2 替换null值,避免逆透视时行丢失,后续无法排序 2.3 逆透视其他列 2.4 再添加索引列 2.5 对索引列取模(取模时输入参数为源表的列数,如3) 2.6 修改公式中的取模参数,使能适应增加列数的动态变化 2.7 再排序并删列 2.8 筛选掉原替换null的行
大海Power
2021/08/30
4K0
推荐阅读
相关推荐
Power Query中如何把多列数据合并?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验