Excel之PowerQuery 按指定行数转置

Excel之PowerQuery 按指定行数转置,第1张

Excel之PowerQuery 按指定行数转置,第2张

回答网友问题:

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

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

第一种方法(笨办法):

1、先知道所有行数


Excel之PowerQuery 按指定行数转置,第3张

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

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

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

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

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


Excel之PowerQuery 按指定行数转置,第4张

写在下面的样子,返回结果{{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(更改的类型))
Excel之PowerQuery 按指定行数转置,第5张

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

第二种方法:


Excel之PowerQuery 按指定行数转置,第6张

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

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


Excel之PowerQuery 按指定行数转置,第7张

最终代码如下:

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

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

Excel之PowerQuery 按指定行数转置,第8张

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

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


本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Excel之PowerQuery 按指定行数转置

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情