[已解决] 有两行的逆透视

  [复制链接]
查看153853 | 回复142 | 2021-2-18 19:48:55 | 显示全部楼层 |阅读模式
10876111524507.rar (11.29 KB, 下载次数: 0)
回复

使用道具 举报

千里飘红 | 2021-2-18 19:54:55 | 显示全部楼层
PowerQuery参考解法(常规的基操套路)
10876111524501.png
10876111524508.zip (17.54 KB, 下载次数: 0)
回复

使用道具 举报

蜜糖熊 | 2021-2-18 20:01:55 | 显示全部楼层
10876111524502.png
回复

使用道具 举报

九谷子 | 2021-2-18 20:04:55 | 显示全部楼层
合并“前两列”——选合并列、转置——合并“转置后前两列”——再转置——将第一行用作标题——选第一列逆透视其他列——拆分列
回复

使用道具 举报

穷疯了 | 2021-2-18 20:10:55 | 显示全部楼层
仅供参考使用。。。数据多了效率非常低啊。。。
10876111524503.png

10876111524509.rar (15.99 KB, 下载次数: 0)
回复

使用道具 举报

frank_reika | 2021-2-18 20:17:56 | 显示全部楼层
凑个热闹,闲着也是闲着....
百万行15秒,lol....
  1. = let a = List.Transform(Table.ToColumns(Table.FirstN(源,2)),each Text.Combine(_,"#(lf)")),

  2.   b = Table.Skip(Table.Transpose(Table.Transpose(源),a),2),

  3.   c = Table.Unpivot(b,List.Skip(a,2),"y","金额"),

  4.   d = Table.SplitColumn(c,"y",Lines.FromText,{"描述","年份"})

  5. in d
复制代码
回复

使用道具 举报

白兔仔 | 2021-2-18 20:18:56 | 显示全部楼层
这一个个M函数看着都晕,你们怎么记得那么多的。。。太强了
回复

使用道具 举报

haitian | 2021-2-18 20:24:56 | 显示全部楼层
凑个热闹,闲着也是闲着....
百万行15秒,lol....


我刚才测试了下,5楼的代码其他不变,把Table.ToRows这部分buffer一下,加在出101万行结果,时间是23秒,还可以接受
10876111524504.png
10876111524505.png
回复

使用道具 举报

改装迷 | 2021-2-18 20:31:56 | 显示全部楼层
也来凑个热闹
  1. let

  2.   Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("dY+/bsIwEMZfxcp8keyL/44ImDt2iDKlDCykonTozgBLR5YidfJSMTC4Qk15nCZk4xVq1yCBVKST7nff+b7z5XmSQAh23xveXeX+RS4gT3plWT1PZqRfPYx841wORk/ldPw4G1cTryJFljI80cv0PymYSUZpCK8e3lz7an/qutnZtF1vmvWWpKR5rwPvbPc594+IQZASSUAG1CgQnMVKSUDkp46hGpTS5HIJ3lzSOts5FyaFBq7on4k0GiSPrBmgjt5aUsiEunLObn//yx2+F41dkeN+wbJu9XHcL4ONAoXxDMOAny/iILWIKISXPRfFLw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t, Column5 = _t, Column6 = _t]),



  3.   #"All Rows" = Table.ToRows(Source),

  4.   #"New Headers" = List.Transform(List.Zip(List.FirstN(#"All Rows", 2)), each Text.Trim(Text.Combine(_, "#(tab)"))),

  5.   #"New Table" = Table.PromoteHeaders(Table.FromRows({#"New Headers"} & List.Skip(#"All Rows", 2)), [PromoteAllScalars=true]),

  6.   #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"New Table", {"Account Code", "Account Description"}, "Attribute", "Amount"),

  7.   #"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Other Columns", "Attribute", Splitter.SplitTextByDelimiter("#(tab)", QuoteStyle.Csv), {"Attribute.1", "Attribute.2"})

  8. in

  9.   #"Split Column by Delimiter"
复制代码
回复

使用道具 举报

下眩月 | 2021-2-18 20:34:57 | 显示全部楼层
凑个热闹,闲着也是闲着....
百万行15秒,lol....


看官方的说明文档,PQ最多支持2^14列;看来中间步骤(Table.Transpose(Table.Transpose(源),a))的table所包含的列数量是可以超过这个限制的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则