Table.ToList 格式转换案例

Table.ToList 格式转换案例

编码文章call10242025-03-23 17:23:4330A+A-

本期案例是进行如下的格式转换,列标题中包含了类别大类的名称,需要将其转换到单独的列进行显示:

解题套路

1.Table.ToList

(1)对于行内转换,总体思路是先按每两列进行拆分,然后与对应标题字段进行压缩,最后连接编码对应数据:

Table.ToList(源,each 
         List.Transform(List.Split(List.Skip(List.Zip({Table.ColumnNames(源),_})),2),(x)=>
                {_{0}}&List.RemoveRange(List.Combine(x),2,1)
         )
)

(2)将列表转换为表并合并子表:

Table.Combine(
  Table.ToList(源,each 
         Table.FromRows(
               List.Transform(List.Split(List.Skip(List.Zip({Table.ColumnNames(源),_})),2),(x)=>
                    {_{0}}&List.RemoveRange(List.Combine(x),2,1)
               ),
         {"编码","类别大类","类别名称","类别编码"})
   )
)

(3)类别大类中数据多了“名称”字符,可以通过列转换函数进行转换:

Table.TransformColumns(
       Table.Combine(
           Table.ToList(源,each 
                 Table.FromRows(
                        List.Transform(List.Split(List.Skip(List.Zip({Table.ColumnNames(源),_})),2),(x)=>
                           {_{0}}&List.RemoveRange(List.Combine(x),2,1)
                         ),
                 {"编码","类别大类","类别名称","类别编码"})
            )
       ),
  {"类别大类",each Text.Replace(_,"名称","")})

(4)当然也可以再压缩环节先对名称进行转换,那最后就可以少一个转换步骤:

Table.Combine(
     Table.ToList(源,each 
            Table.FromRows(
                  List.Transform(List.Split(List.Skip(List.Zip({List.Transform(Table.ColumnNames(源),
                         each Text.Replace(_,"姓名","")),_})),2),(x)=>{_{0}}&List.RemoveRange(List.Combine(x),2,1)
                    ),
            {"编码","类别大类","类别名称","类别编码"})
     )
)

2.Table.Group

分组函数的实际转换的思路都比较类似,这里不使用压缩函数,而是采用降标题的方式:

Table.Combine(
     Table.Group(源,"编码",{"a",each 
                Table.TransformColumns(Table.FromRows(
                         List.Transform(List.Split(List.Skip(Table.ToColumns(Table.DemoteHeaders(_))),2),(x)=>{[编码]{0}}&List.ReplaceRange(List.Combine(x),2,1,{})),
                {"编码","类别大类","类别名称","类别编号"}),{"类别大类",each Text.Replace(_,"名称","")})
      })[a]
)

3.Table.UnpivotOtherColumns

先进行逆透视处理,接着统一类别大类的数据格式,然后做分组处理:

Table.Combine(
    Table.Group(
      Table.TransformColumns(
              Table.UnpivotOtherColumns(源,{"编码"},"属性","值"),
        {"属性",each Text.SplitAny(_,"名称编号"){0}}),
    {"编码","属性"}, {"a",each Table.FromRows({{[编码]{0},[属性]{0}}&[值]},{"编码","类别大类","类别名称","类别编号"})}
    )[a]
)


以上是本期内容。

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

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