最近我遇到个坑爹的重复体力劳动活儿:有这么一类(注意不是个)表,见下图,
要把它做成图表,放到PPT里,类似于这样:
总共有17个指标,这意味着至少有17页PPT要做。17个指标的维度有多有少,所有图表类型也要求不一样。
坑爹之处在于:每周都会收到N份这样的表格,然后要做N个这样的PPT。目前N》=5,随着业务增长,这个N会不断增大;并且当老大需要某份表格的PPT时,我得在最短时间内拿出来。而这只是我工作内容中很小的一部分。
所以,靠体力活儿肯定不行。
常规思路一
我能想到的常规思路是在PPT中插入数据图表,然后把17个指标的数据分别复制到图表的数据源中。
这样可以简单计算出一个工作量:在PPT中插入17个数据透视图,然后复制粘贴17次数据,再对每一个数据透视图进行微调。再加上文字描述,一页PPT至少要花费5分钟。这样,做完这个PPT需要90-120分钟。
常规思路二
直接在Excel中选择指标生成透视图,然后再复制粘贴到PPT中,粘贴时选择“粘贴为链接”,这样,Excel中的图表更新后,PPT中的图表会自动更新。PPT中文字描述部分需要用到的数据依然采取复制Excel数据再粘贴为链接的办法。
类似于下面这样:
采用这种方式,只是第一次稍微花费时间多一点,以后就比较方便了:直接把数据粘贴到这个Excel中,刷新一下,这样数据透视图就更新了;然后打开PPT,再更新下链接即可。
采用这种方式,除了第一次稍微花费时间多一点之外,以后要做一个PPT,只需要花费不到5分钟。相比【常规思路一】90-120分钟,效率提高了17-23倍。这已经是很吓人的改进了。
但是这种方式有一个弊端:
万一指标及其维度的个数发生了变化,或者给过来的数据里,指标的顺序发生了变化,所有的事情都会乱套。
是时候祭出PowerQuery大法了
使用PowerQuery来处理,思路和【常规思路二】类似:在Excel中生成图表数据后复制到PPT中,粘贴为链接来PPT中的数据图表即时更新。
不同之处在于对原始数据的处理:
首先,在PowerQuery中引入来自于文件夹(名字叫“原始数据”)的数据源,建立一个名叫“原始数据”的查询。目的是避免每次都要修改原始数据的文件名。对该查询进行简单清理,如删除不必要的列,提升标题等。
其次是分别建立17个查询,都引用(注意不是复制)“原始数据”这个查询。引用的好处是“原始数据”发生变化了,17个查询会跟着变化;如果用复制的方式,“原始数据”发生变化之后,还得手动修改17个查询。
第三步是把这17个查询加载到表。之所以不加载到数据模型是因为将来PPT的文字描述中还需要表中的数据。我顺便将数字处理为百分比了,这样看着顺眼。
以上三步在PowerQuery的界面中即可完成,而且也没有复杂的操作,就是引入数据源,引用数据源,删除不必要的列,改变数字格式,提升标题等。所以,原始代码就不给出了。
第四步是在17个表中分别生成各自的数据透视图。
接下来的步骤和【常规思路二】一模一样了:复制PPT需要的数据图表,然后在合适位置粘贴为链接。这样将来可以即时更新PPT中的数据图表。
如何在新的数据来了之后更新PPT呢?
第一步,把原始数据丢到“原始数据”文件夹;
第二步,打开建立好的PowerQuery模板Excel文件,刷新;
第三步,打开PPT,更新链接,完成。
这样花费的时间也在5分钟左右。
这样做的好处是,即使指标及其维度的数目或位置发生了变化,都不会造成任何影响,每次生成PPT都只需要5分钟。我要生成5个PPT也只需要半小时;如果要生成更多PPT,假设要生成10个,那也只需要一个小时就能完成。
如果要生成几十个,上百个PPT,那就得借助VBA的威力了——不过这是我的猜测,还没有机会来验证。
结语
所以,PowerQuery最大的好处是以非常有弹性的方式,把重复工作封装起来,将我们从无休无止的重复体力活儿中解放出来,去干其他自己想做的事情。
当我们需要在office程序之间共享数据时,粘贴为链接是最佳思路——数据与图表会随着原始数据更新而更新。(不过要注意一点,office365最近的升级导致放在onedrive的原始数据粘贴为链接后更新失败)。