- 1 -
在很多个视频或文章里,我都强调过,Power Query虽然在很大程度上给用户实现报表的自动化(随源数据的增减动态一键刷新得结果)提供了很好的功能。
但是,在某些操作上,Power Query里的步骤所生成的代码是相对固定的,因而会导致某些新增的数据不能被添加进来,或某些数据被删除时出现错误。如视频《PQ操作的陷阱及工作原理》:
这些“坑”,我在系列视频中,当案例中的操作方法可能出现类似的问题时,都尽可能做好提醒以及提供实现真正动态化的方法,让大家尽可能少走弯路,更快地加深对Power Query的理解并灵活运用到实际工作中。
- 2 -
以下是视频课交流群里的朋友需要实现的一个问题:动态合并除某些列以外的所有列。
这个问题用操作的方法很简单,即选中需要合并的列,然后点击“合并列”按钮,就搞定了,如下图所示:
但是,通过这种操作方法,当你删掉一些列的时候刷新就会出错:
而当增加一些列的时候,刷新却出不来,如源数据中增加一列:
究其原因,是因为“合并列”的操作步骤中,生成的代码如下,其中对你操作时选中的列生成了一个固定的列表:{"标题2", "标题3", "标题4", "标题5"},如下图所示:
那么,如果我们要实现动态的合并,那就要想办法让这个列表能够适应表中相应列的删除或增加,即通过相关的函数,来动态的构建这个列表,具体实现方法如下:
即,将原来生成的固定的列表的内容,替换成图中红框内的函数应用,思路也很简单:
1、通过函数Table.ColumnNames读取整个表的所有列的列名;
2、通过List.RemoveItems函数删掉不要合并的列的列名。
这样,无论你在源数据上是增加还是删除需要合并的列,这个函数的组合就会动态地获取到整个表最新的列名信息,然后剔除不需要合并的列名信息,剩下需要合并的列名。
类似的情况有很多,比如,拆分列的时候可能遇到数据增加时出错、合并工作簿数据时如果增加了列,可能读不到,等等。
但是,只要我们掌握PQ的工作原理及相关的基础知识,在出现生成了非动态的内容时,按需要修改为动态处理的形式,就一定能在遇到这些坑的时候,顺利的跨越。