Table.Pivot 格式转换案例(table转double)

Table.Pivot 格式转换案例(table转double)

编码文章call10242025-02-01 3:22:3214A+A-

本期案例是进行如下转换:

解题套路

1.Table.Pivot

解题思路:这里可以借着结果来进行逆透视,然后来构造透视需要的格式。

根据逆透视的结果,可以对源表进行添加列,对于同一组内的赋值Part对应的Col2的值,其他进行填充,然后对Col1中对包含Part的行进行移除:

对a列进行透视处理:

步骤合并结果:

Table.RenameColumns(
     Table.Pivot(
         Table.RemoveMatchingRows(
              Table.FillDown(
                Table.AddColumn(源,"a",each if [Col1]="Part" then [Col2] else null),
             {"a"}),
        {[Col1="Part"]},"Col1"),
      Table.SelectRows(源,each [Col1]="Part")[Col2], "a", "Col2"),
  {"Col1","Part"})

也可以结合分组函数,先进行分组、添加列、合并、透视处理:

Table.Pivot(
     Table.Combine(
          Table.Group(源,"Col1",{"a",each 
                                Table.AddColumn(Table.Skip(_),"b",(z)=>[Col2]{0})
           },0,(x,y)=>Number.From(y="Part"))
     [a]),
  {"A".."C"},"b","Col2")

2.Table.Group1

解题思路:从源表中可以看到,最终结果是对数据进行分组后,取Col2的值纵向显示,那么就可以通过分组直接深化Col2列获得;对于第一列,是取行数最多的组对应的Col1的值,但发现对源的Col1进行合并去重就是想要的结果,因此就获得了以下结果:

Table.PromoteHeaders(
   Table.FromColumns(
     {List.Distinct(源[Col1])}&Table.Group(源,"Col1",{"a",each [Col2]},0,(x,y)=>Number.From(y="Part"))[a]
    )
)

3.Table.Group2

解题思路:先进行两次分组:

再对分组部分进行转置、删除首行、提升标题等操作:

最后使用表扩展函数:

Table.RenameColumns(
     Table.ExpandTableColumn(
         Table.Group(
           Table.Combine(Table.Group(源,"Col1",{"a",each Table.AddColumn(Table.Skip(_),"b",(z)=>[Col2]{0})},0,(x,y)=>Number.From(y="Part"))[a]),
         "Col1",{"a",each Table.PromoteHeaders(Table.ReverseRows(Table.Skip(Table.Transpose(_))))}),
       "a",{"A".."C"}),
  {"Col1","Part"})

4.Table.AggregateTableColumn

解题思路:先进行两次分组。

在使用函数进行聚合处理:

Table.AggregateTableColumn(
      Table.Group(Table.Combine(Table.Group(源,"Col1",{"a",each Table.PromoteHeaders(_)},0,(x,y)=>Number.From(y="Part"))[a]),"Part",{"b",each _}),
  "b",List.Transform(Table.SelectRows(源,each [Col1]="Part")[Col2],(x)=>{x,Text.Combine,x}))

以上是本期内容。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4