Table.Transpose()可以抽象地概括为function(table as table, optional columns as any) as table, 意思为该函数的第一个参数为需要行列转置的表格,第二个参数是可选的而且可以为任意种类的变量(主要用于控制行列转置后的列名称与数据种类),函数的输出结果为行列转置后的表格。
要完成以上左表(Example1)行列转置为右表,需要以下的代码:
let Source = Table.Transpose( Example1, type table [ Col1=Int64.Type, Col2=Int64.Type, Col3=Int64.Type ] ) in Source
因为经过Table.Transpose()处理后的表格会默认丢失数据类型与列的名称,如果需要为转置后的表格修改列的名称与数据类型,该函数的第二个参数可以为{"列名称1".."列名称N"}或者以上代码展示的同时修改名称与数据类型的方法。
为了加深对Table.Transpose()的印象,将会使用该函数解答108式的隔列获取纵向合并问题。该问题需要把隔列放置的多个表格纵向合并为一个表格,除了原文给出的解答,读者也可考虑以下以Table.Transpose()为核心的解法:
let Source = Excel.CurrentWorkbook(){[Name="表1"]}[Content], DHeaders = Table.DemoteHeaders( Source ), Transpose = Table.Transpose( DHeaders ), RemoveNumbers= Table.TransformColumns( Transpose, { "Column1", each Text.Remove( _, { "0".."9" } ) } ), SerialTransform= Table.Group( RemoveNumbers, "Column2", { "GTable", each Table.PromoteHeaders( Table.Transpose( Table.RemoveMatchingRows( _, { [Column2 = null ] }, "Column2" ) ) ) }, GroupKind.Local, ( x,y ) ⇒ Number.From( y=null ) ), UnionAll = Table.Combine( SerialTransform[GTable] ) in UnionAll
以上代码首先对原表格进行了一次行列转置,然后进行局部分组并对组内的表格行列转置,最后把分组后的表格进行合并就得到需要的表格。