这是一个很常见的问题:要读取的数据需要通过多次vlookup取得,比如下面简化的滚动效益测算问题,先按合同号匹配,如果匹配不到,再按计划号匹配,在Excel里使用2次vlookup函数实现,如下图所示:
但是,这种情况在Power Query里怎么实现呢?
虽然我们经常用合并查询来实现类似vlookup的操作,功能也很强大,但是,合并查询功能也有其局限性:只能是表对表直接选择同样数量的匹配的列合并成结果表,无法干预或有选择地切换匹配条件!
由于合并查询的这种局限,对于我们前面提出的问题,如果直接用合并查询,就会比较麻烦,有兴趣的朋友可以试一试。
当然,你也可以用Table.SelectRows等表筛选的方式来实现,但如果数据量较大,使用这个这种方式可能效率会比较低,且需要写比较长的公式。有兴趣的朋友也可以试一下。
那么,除此对于这种情况,还有什么好的解决办法吗?
其实,我们仍然可以使用合并查询来实现,而且非常简单,只要我们先对匹配的源数据进行简单的处理即可,具体方法如下:
Step-01 逆透视基础数据中的匹配条件
逆透视后,结果如下,注意其中的值列,包含了合同号或计划号:
这样,我们就可以直接一次性合并查询得到想要的结果了。
Step-02 合并查询得结果
Step-03 直接展开数据
我们将得到和在Excel里多次使用vlookup函数一样的结果:
对于很多从Excel转向学习Power Query的朋友,一开始的时候可能比较习惯于Excel中常用的解题思路,这其实也很正常。
但是,随着对Power Query的操作和函数越来越熟练,渐渐就能基于Power Query的特点对问题的解决方法进行优化,尤其是在遇到某些在Excel中看起来很简单但在Power Query中用同样的方法实现起来比较困难的时候,换一个思路,可能就会豁然开朗。