首页 > 解决方案 > PowerQuery(在 PowerBI 中)奇怪的缓存问题

问题描述

在过去的几天里,我一直在尝试解决 Power BI Desktop 中 Power Query 中的一个奇怪问题。


我有两张表,一张叫做“Mappings”表,这张表的目的是经过一堆转换后给我一个名为“FMReference”的列。 映射截图

我有一个名为“Entry”的主表,它没有 FMReference,因此需要与 Mappings 表合并。为了使合并更简单,我在两个名为“CombinedForMerge”的表上创建了一个简单的列。条目截图

完成列的设置后,我继续使用我刚刚创建的列创建一个包含 Entry 和 Mappings 表的 Left Outer Merge。左外合并截图

正如您在屏幕截图中看到的那样,FMReference 列显示 A4.28,这是我对结果的预期。但是,一旦我扩展该合并以给我 FMReference,我就会得到一个不同的值,A3.2!错误值截图


Power BI 清楚地缓存了 PowerQuery 上的错误值,因为我已将映射表过滤为仅一行,以获得仅一个值。过滤的映射屏幕截图

我曾尝试从 Power BI 选项中清除缓存,但这并没有改变任何东西。

我还尝试从一个干净的新 PBIX 重建 Power BI 报告,只是将转换复制到这一点,但我仍然遇到同样的问题。

我尝试将 Mappings 表的结果复制到静态表中,并将其用于合并。这很有效,这显然意味着它需要对 Power BI 上的数据转换进行缓存。

我已经刷新了 Preview 和 Refreshed ALL 几次,但它仍然返回错误的结果。


在这一点上我会很感激任何帮助,数据非常敏感,所以我不能分享很多,但如果需要,我很乐意提供更多细节。

提前致谢!

标签: cachingpowerbipowerquery

解决方案


在使用模糊合并时,我遇到了类似的莫名其妙的奇怪行为,设置为完全匹配。我最终交换了表格并使用了 Right Outer 合并。出于某种原因,这行得通。我不知道是什么导致了这个问题,也不知道为什么 Right Outer 合并方法有效。这很奇怪。

所以我要说的是:与其从 XXXXEntry 开始合并并通过左外合并匹配 XXXXMappings,不如尝试从 XXXXMappings 开始并通过右外合并匹配 XXXXEntry。

如果您仍希望在同一查询中的同一位置进行合并,一种方法是在公式栏中编辑现有查询的代码。为此,请单击与合并关联的应用步骤,最有可能称为合并查询;然后在公式栏中,交换对表的引用并将 JoinKind.LeftOuter 更改为 JoinKind.RightOuter。(一个表引用可能是合并查询步骤之前的应用步骤的名称,而不是 XXXXEntry。对我来说,在接下来的示例之前和之后,它是 #"Changed Type"。)

前:

= Table.NestedJoin(#"Changed Type", {"CombinedForMerge"}, XXXXMappings, {"CombinedForMerge"}, "Changed Type", JoinKind.LeftOuter)

后:

= Table.NestedJoin(XXXXMappings, {"CombinedForMerge"}, #"Changed Type", {"CombinedForMerge"}, "XXXXMappings", JoinKind.RightOuter)

祝你好运。


推荐阅读