美文网首页
如何在Power Query中对不同行,列名排序一致进行转置?

如何在Power Query中对不同行,列名排序一致进行转置?

作者: Data_Skill | 来源:发表于2019-06-05 14:47 被阅读0次

之前的案例都是列数及行数相同,那如果是不同的情况下,该如何处理呢?

原表:

同行不同列原表同行不同列原表

目标表:

同行不同列目标表同行不同列目标表

此时我们可以通过另外一个分组函数来进行处理。Table.Group

Table.Group(table as table, key as any,
            aggregatedColumns as list,
            optional groupKind as nullable number,
            optional comparer as nullable function) as table
  • 第一个必填参数:我们很好理解,是从哪个表进行操作。
  • 第二个必填参数:是根据哪列数据进行分组,可以为文本格式及列表格式。参数必须要填写,但是可以是空列表{},只有在不需要值来计算时可以使用。同时如果是列表格式,则第4参数默认为全局分组。
  • 第三个必填参数:怎么进行分组操作,是一个函数公式。
  • 第四个可选参数:1=全局分组;0=局部分组(分组到下一条不等值为止)
  • 第五个可选参数:目前所知是有2个参数组成的函数(x,y)其中X为每次分组后的第一行;Y为X当前行及下面的每一行。通常用(x,y)=>Number.From()固定格式来处理所判断后的条件值。

(一) 通过增加列来判断分组的依据。

if Text.Contains([列1],"班") then 1 else null
添加分组依据列添加分组依据列

解释:
判断列1是否包含班的关键词,如果有就标记1,没有就空着。主要是为了之后的分组作为依据。

(二) 根据分组依据分割成各个表格

Table.Group(已添加自定义, 
            "自定义", 
           {"计数", each _},
            0,
           (x,y) => Number.From(y=1)
           )
分割表格分割表格

解释:
判断从1开始直到下一个为1之前的作为一个表来进行分组。

(三) 对分组后的表进行转置

可以通过添加列,也可以在之前分组的时候进行处理。

Table.Group(已添加自定义, "自定义", 
              {"计数", each Table.Transpose(_)},
              0,
              (x,y)=>Number.From(x=y)
            )
Table.AddColumn(分组的行, "自定义.1", each Table.Transpose([计数]))
分组表内转置分组表内转置

(四) 保留所需要的数据并展开

数据展开数据展开

(五) 最后添加班级并向下填充以及重命名标题及筛选后得出最后结果。

这里留个疑问,因为目前来看,列名都是一一对应的,如果列名不一致的话,如何进行处理呢?可以先行试着操作下。

原表:

不同行不同列原表不同行不同列原表

目标表:

不同行不同列目标表不同行不同列目标表

案例模拟文件下载
http://gofile.me/4KHV7/SUo5ywXxC
试试看能不能得出效果呢?
如果用之前的方式,我们不能把不同项目归类在一起,得到的错误结果是这样的。

错误结果错误结果

相关文章

网友评论

      本文标题:如何在Power Query中对不同行,列名排序一致进行转置?

      本文链接:https://www.haomeiwen.com/subject/nfxsxctx.html