Excel之PowerQuery 按指定行数转置
回答网友问题:
解决这个问题的方法有很多,对于我们使用者来说(开发人员除外),解决问题的时间并不只看你程序运行时间,而是综合时间。想代码+运行时间=综合时间
我随便说两个方法,比如网友这个问题,每三行转置
第一种方法(笨办法):
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来实现
最终代码如下:
= 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
本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
0条评论