打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel之PowerQuery 按指定行数转置
userphoto

2023.04.07 四川

关注

网友提问:

回答网友问题:

解决这个问题的方法有很多,对于我们使用者来说(开发人员除外),解决问题的时间并不只看你程序运行时间,而是综合时间。想代码+运行时间=综合时间

我随便说两个方法,比如网友这个问题,每三行转置

第一种方法(笨办法):

1、先知道所有行数

2、例如表1有9行,每3行一组,那就是 9行 ÷ 3个/组 = 3组,可以写成下面的样子

Table.RowCount(更改的类型)/3

3、组成列表,样子是{1,2,3},写成

{1..Table.RowCount(更改的类型)/3}

4、遍历这个列表,让列表中每个元素重复3次

写在下面的样子,返回结果{{1,1,1},{2,2,2},{3,3,3}}

List.Transform( {1..Table.RowCount(更改的类型)/3},each List.Repeat({_},3)

5、使用List.Combine合并,将上面的列表变成{1,1,1,2,2,2,3,3,3}

6、将表与按列转列表,再与上面的列表连接后转成表。最终公式

= Table.FromColumns({List.Combine(List.Transform( {1..Table.RowCount(更改的类型)/3},each List.Repeat({_},3))) } & Table.ToColumns(更改的类型),{'序号'}&Table.ColumnNames(更改的类型))

现在可以使用Table.Group分组转置了(这步就略了)。但是这样的方法速度慢,性能损失严重,只是给你提供一个思路,因为有的场景暂时只能用这种笨办法,除非语言开发设计者有更好的优化。

第二种方法:

思路:第1次从下标0开始取3行,第2次从下标3开始取3行,第3次从下标6开始取3行

我们只需要{0,3,6} 这样的列表表示下标,可以使用List.Genreate步长为3来实现

遍历这个列表,配合List.Range使用

最后按行转表就可以了:

最终代码如下:

= Table.FromRows(List.Transform( List.Generate(()=>0,each _<=Table.RowCount(更改的类型)-1,each _+3) , (x)=> List.Range( 更改的类型[ID] , x , 3 )))

当然还有更多的方法,不过,解决这个案例并没有实际意义,意义在于工作中实战的应用,不同需求,有不同的处理方法。

PowerQuery合集:https://www.bilibili.com/video/BV1oa4y1j75e

更多视频:https://www.bilibili.com/read/cv10222110

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
遍历下标取值
删除数据库中重复数据的几个方法
70+篇PQ/PP/PBI文章视频,除了链接,竟然还有内容要点!
SQL server 2000,Sybase及Oracle 随机取记录方法
execute、executeQuery和executeUpdate之间的区别
Power Query中的Transform怎么用?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服