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
以上代码首先对原表格进行了一次行列转置,然后进行局部分组并对组内的表格行列转置,最后把分组后的表格进行合并就得到需要的表格。