- 1 -
先说最近遇到一个问题:如何在power query中,实现lookup,查找另外一个表中,"匹配位数"最多的。
其中,关于“匹配位数”最多的,这个逻辑要细说一下,用上图中例子“abc”说明,最终要求匹配的是"ab",而不是"abcd",具体是:
基于“abc”去查找,如果没有找到,去掉末尾一位,继续找,如果没找到,再去掉一位……
另外,问题中还有一个很有意思的关联信息:实现Lookup?
很多朋友应该都听说过Lookup函数有多牛掰!也可能看过诸如“真正的查找之王之类”的文章,但是,都学会了吗?
再回到这个具体问题,用Lookup能解决吗?
的确可以,我会在本文的配套文件中同时给出Lookup函数结合VLookup函数(这里也体现了Lookup函数不能完全替代VLookup函数的一些特点)的解法,也欢迎其它朋友提供更多解决办法。
不过,我感觉这种套路对大多数人来说,应该是比较难的,因为其中涉及的“非常规”函数用法比较多!
- 2 -
在Power Query里,这个问题解决起来其实是比较简单的,主要是理清思路后,使用一些基础函数的常规用法。
1、将数据直接字符数提取成全部可能的字符串
比如,abc,拆分为a,ab,abc,这个使用List.Transform函数直接实现:
2、提取后,与需要匹配查找的数据源做一个交集
这样,自然就保留了两边都同时存在的数据:
3、 取交集的最后一项就是我们想要的结果
如果需要合并在一起一步解决,也可以将上面的几个步骤内容进行组合即可:
- 3 -
在日常工作中,有大量的数据匹配问题,需要经过多层次的数据处理,然后才能“筛选”(查找)到自己真正想要的匹配值,从这一点上来说,Excel传统函数的确存在一些弱点:
- 在Excel的传统函数中,比较难实现类似Power Query中的表、列表的批量预处理,所以使用的时候需要各种复杂的套路或技巧(不一定公式很长)才能处理——这一点对大部分用户来说,都十分困难。
- 在Excel的这些匹配查找公式中,涉及的中间处理过程比较难进行拆分,所以很难采用先分后合的方式,由简单到综合进行一步步尝试,这也进一步提高了写综合公式的难度。
- 大多数套路或技巧,往往适用的场景有限,结果是,换一种形式,可能又不会了!
在Power Query里,则可将很多复杂的问题,按需要拆分成多个简单的常规处理过程,从而使大问题变成小问题,复杂问题变成简单问题,并且每一个简单问题(中间过程)都可以先独立去尝试,而不需要太多灵活多变的技巧!且常规的方法组合,往往也不会受到应用场景的太多限制。
当然,千万不要误会这是说PQ就比Excel传统函数好,两者各有优势,充分了解两者的优劣,取长补短,才是关键。