Table.Transpose()

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

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

附件

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注