【源数据才是大麻烦】这个数据你打算怎么洗?
这个问题来自于公众号一位同学的留言。上次我们发了一篇文章:
【源数据才是大麻烦】如何多列数据合并成两列
这位同学看到后,想起了自己遇到过的问题,于是就留言问:
提问:ABCD列是共同列,EF\GH\IJ\KL\列有为各自组的数据。数据要洗成ABDCEF(然后GH\IJ\KL放在EF的下面,他们前面依然要的是ABCD列的数据)有解吗?
看过以前文章的同学都知道,Power Query功能非常强大,基本上可以说没有什么它做不了的(到现在为止我只发现一件事只靠Power Query做不了😁)。
我觉得这位同学的这个问题很有代表性,也是一个比较常见的问题,所以就写一篇文章介绍一下这个问题的处理方式。
文末有处理过程的视频演示
先来看一下数据:
这是这位同学模拟的数据,其中A到D列是数据的类型,E到J列记录了不同的人所对应的金额。其中EF是一组,GH,IJ是另外两组。
其实那位同在留言中,已经很好的说明了需求,他还好心的做了一份目标数据:
红色方框里的数据(G:J)列是原来的数据,需要把黄色的数据放到EF列上,在下面,还需要把IJ列的数据也放到EF列上。
这里唯一值得商榷的就是最好将E列的列名从“店长”修改为“员工"。
看上去其实跟我们那篇文章中的数据差不多,只不过多了前面ABCD四列。就是这四列,让我们不能使用原来的方法。今天介绍的这个实现方法更有启发性,可以扩展你的思路,这个方法也可以处理更多的情形。
在“数据”选项卡下,点击“从表格”:
进入Power Query编辑器
选中前面4列(大类型1,大类型2,大类型3,大类型4),点击鼠标右键:
得到结果表格:
到此为止,我们做的事情跟这篇文章讲过的一样,也得到了类似的结果。但是,这个属性和值列把员工和金额搅合在了一起,我们需要把他们分开。
在“添加列”选项卡中,点击“索引列”:
添加一列索引:
在“添加列”选项卡上,点击“自定义列”:
在弹出的对话框上,将新列名修改为“序号”,自定义列公式中输入:
=Number.RoundDown([序号]/2,0)
插入序号列:
删除索引列:
由于数据中将人员和金额放在了一起,我们需要将他们分开。
首先,选中属性列名的筛选箭头,点击“文本筛选器”,选择“开头不是”:
在对话框中,将第一行右边的文本框输入为“金额”:
点击确定后,得到如下的表格:
在公式编辑栏,全选该公式,按Ctrl+C复制:
在右侧面板中,选中最后一个步骤,点击鼠标右键:
点击“插入步骤后”:
选中公式栏,全选公式,按Ctrl+V粘贴:
将其中的not删掉:
回车后,得到表格:
选中最后一步的表格中的前5列,全部删除:
将“值”列名称修改为“金额”:
在右侧面板中,选中最后一个步骤,点击鼠标右键:
在新步骤的公式栏中,输入公式:
= Table.Join(筛选的行,"序号",重命名的列,"序号")
回车后得到结果:
将属性列名修改为“人员类型”,值列名称修改为“人员”:
删除“序号”列:
先按照人员类型列降序排序,再按照人员升序排序:
得到结果:
在“主页”选项卡中,点击关闭并上载:
得到结果:
我们得到了想要的结果!
视频演示