明明结果是对的,为什么被合并查询后得到的结果却出错了?| Power Query躲坑

2022-11-07 19:30:36 浏览数 (1)

最近,有位朋友在一个实际工作问题中,在表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也很容易犯的“错误”
  • ……

0 人点赞