最近,有位朋友在一个实际工作问题中,在表2使用合并查询从表1的结果中匹配最高(阶段)项,眼看着表1的结果是对的,但表2里却得到了错误的返回结果,具体情况如图所示:
为什么会这样?
我们先来看表1的处理情况。
为了合并查询得到最高阶段项,对表1进行降序排序:
然后通过删除重复项保留最高阶段数据:
从表1的结果来看,的确保留了最高阶段的数据。
然后,在表2里使用合并查询获取表1中的结果并展开:
咦!!!
表1的处理结果明明是阶段4(报价),为什么合并查询得到的结果却是阶段2(售前)?
这难道是Power Query的Bug吗?
实际上,经过这么多年的发展,Power Query已经相当成熟了,合并查询这种基本的功能,不大可能存在这样的Bug或低级错误的。
这里的问题根源其实是表1的处理问题,我以往发布的多篇文章案例中,在涉及Power Query中使用排序的问题时会强调,Power Query的排序需要增加添加索引或Table.Buffer的步骤,使排序的结果真正“固定”下来!
所以,回到这个问题,针对表1的排序步骤,我们可以嵌套Table.Buffer函数(图中中间行为原排序操作生成的代码,无所做任何改变):
这时,我们再看表2的结果:
完全正确!
纵观整个问题,其实并不复杂。但是,因为是跨查询引用,而且从表面上看,被引用的查询结果显示上并没有错误,从而使得错误被隐藏得相对较深一些(本案例处理步骤较少,发现相对容易,如果步骤更多一些,可能发现起来就更难一些)。
而这些问题的发现和解决,一般需要对Power Query的基础知识和一些特性(问题)比较熟悉,我前期也针对学习PQ容易碰到的问题写过一些文章、录过一些视频,建议大家可以多了解:
- Power Query新手经常问的几个操作问题
- 这十个问题,Power Query初学者经常问
- 5个PQ错误处理方式,最后一个其实最重要!
- Excel大V也很容易犯的“错误”
- ……