案例来源于一位同学的一种设备,去敏后格式如下:指标涉及100多个,每次测量的指标不一样,也就是说,设备除了“数据编号”外,其他标题名称错位存放于同一工作表中。另外,每个编号的条目数量(行数)不一样,大部分1条,但有的是2条或3条。
经Power Query处理后,结果如下:
处理的原理是:依据Power Query按照列名识别数据的特点,将每个数据编号分组,拆分为独立的表格,然后独立小表格提升标题后合并。实施过程如下。
将数据源导入Power Query后添加索引列,用于识别每个“数据编号”出现的位置。
筛选列1的数据编号内容,界面只留下了所有标题,为这个筛选后的表再建一个索引,命名为“分组”,后期表格将按照此分组拆分。
Power Query的每一步操作生成的步骤可以看作一个表,不同的表之间可以相互调用。前面已经有了四个步骤对应四个表。现在的问题是,最后的步骤使得界面停留在仅剩标题的状态,数据被筛选掉了。而需要的结果是,对原始表进行分组索引。
所以,我们需要将“分组索引”表生成的“分组”添加到“全部数据索引”表中,添加的方式是合并查询,在分组索引后新增以下公式:
= Table.NestedJoin(全部数据索引, {"索引"}, 分组索引, {"索引"}, "分组编号", JoinKind.LeftOuter)
展开后如下图所示:
接着使用向下填充功能填充空白,全部数据即实现了编号和分组。
除了合并查询,还可以使用自定义函数的方法对数据分组编号,详见pqfans.com施阳老师的文章。
这两种方法都不好理解,最简单最容易理解的方法其实是直接在Excel界面中的数据源加一列:
分组编号确立后,使用分组依据功能将表格内容缩回:
添加自定义列删除每个表的分组编号(只保留数据源内容),然后提升标题,展开自定义列后即可得到文章开头的清洗结果。