合并多表数据是常见的数据处理工作之一。无论大小公司,难免会遇到需要手工收集一些数据信息,可能是临时性的,也可能IT系统没有架设好的缘故。手工报表的最大特点是:存在一定的不规范性,给整合带来困难。
如下图所示,我们要收集各个省份的相关数据。红框处是理想情况下仅仅存在于表中的信息。但是由于报表填写人员习惯问题,你会得到很多附赠,比如人为插入行,使得不同表格标题不在同一位置。比如人为增加文字或无关的计算(如图中的"4.22提交",乱码等)。这种手工报表如何准确自动合并呢?
核心思想是剔除干扰因素,找到规律,只提取其中规范的数据。对于上图,我们需要提取的是标题行开始(尽管标题不在同一行,但是标题内容固定)直到“总计”行的内容。
在Excel/Power BI中,首先使用文件夹的方式,将数据导入Query
- Power BI路径:主页-获取数据-文件-文件夹
- Excel 2016及以上路径:数据-新建查询-从文件-从文件夹
- Excel 2013路径:Power Query插件(需单独安装)-从文件-从文件夹
新建自定义列Excel.Workbook([Content])大法获取详细数据。
这个时候,如果直接将数据展开,会发现所有无关信息全部进来了。所以在展开前先进行处理(以下步骤为清晰说明,拆分操作,实际使用时可嵌套一步完成)。
第一步去头,添加自定义列,以“省份”为锚,输入以下公式,展开数据后发现标题上方的无关内容都被跳过。
代码语言:javascript复制Table.Skip([Data],each [Column1]<>"省份")
第二步,去尾,以“总计”为锚,去除“总计”后面的内容。展开发现只保留了需要的数据区域。
代码语言:javascript复制Table.RemoveLastN([去头],each [Column1]<>"总计")
还有一点不完美的地方,每个表中都有标题,我们可以再嵌套一个提升标题。
代码语言:javascript复制Table.PromoteHeaders([去尾])
最后再略作删减处理,得到需要的结果。