之前的案例都是列数及行数相同,那如果是不同的情况下,该如何处理呢?
原表:
目标表:
此时我们可以通过另外一个分组函数来进行处理。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(y=1) ) Table.AddColumn(分组的行, "自定义.1", each Table.Transpose([计数]))
(四) 保留所需要的数据并展开
(五) 最后添加班级并向下填充以及重命名标题及筛选后得出最后结果。
这里留个疑问,因为目前来看,列名都是一一对应的,如果列名不一致的话,如何进行处理呢?可以先行试着操作下。
原表:
目标表:
案例模拟文件下载http://gofile.me/4KHV7/SUo5ywXxC
试试看能不能得出效果呢?
如果用之前的方式,我们不能把相同项目归类在一起,得到的错误结果是这样的。
如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。