2017-06-17 289 views
0

我想用Powerquery在Excel中执行一个操作。为什么前一行中的值的引用会引发此Expression.Error?

我想删除列表中的联系人,如果他们连接到某个CompanyID但列有不同的CompanyName。

第一步是通过与上面的行进行比较来过滤它们。他们总是连续列出。

下一步是删除删除列中包含值delete的所有行,但不幸的是我没有进入该步骤。

我已经看过this post,并用下面的代码曾尝试:

= Table.AddColumn(#"Added index", "Delete", each if [CustomerID]= #"Added index"{[ContactID]-1}[CustomerID] and [CompanyName]<> #"Added index"{[ContactID]-1}[CompanyName] then "delete" else null) 

但我得到这个错误:

There were too many elements in the enumeration to complete the operation 

我用Google搜索了错误,它似乎有重复的连接列名,但我没有任何这些。

请帮忙!

+0

您是否在“已添加索引”步骤之后立即添加此步骤?或者之间有任何步骤?发布从“已添加索引”步骤开始的代码。您发布的声明对我来说工作得很好,所以数据中一定有一些东西。 – teylyn

+0

Thx @teylyn!这让我朝着正确的方向前进。正如你怀疑的那样,它们之间有几个步骤。 '添加索引'和'添加列'。由于敏感信息太多,我不想发布完整的代码。编辑它们需要很长时间,并且还可能冒着代码中的拼写错误。 – MrDark

+0

我会尝试解释导致错误的步骤。在创建索引列后,我创建了一个名为CustomerID的自定义列,并使用索引列来生成一个从10000. 10001,10002,10003等开始的数字序列。然后我删除了索引列。接下来,我使用原始帖子中的代码尝试使用CustomerID列引用上面的行。那是错误发生的时间。 – MrDark

回答

1

如果您在处理数据的#"Added Index"之后有任何步骤,那么您需要知道当前步骤将参考出现在步骤#"Added Index"中的数据。在#"Added index"步骤之后执行的任何操作都不会对您发布的声明可用。

您可能希望调整您的发布步骤以使用数据的最新表示而不是#"Added index"

如果#"Added index"是M代码中的最新步骤,那么语句运行正常,所以问题在于数据在两者之间的步骤中被操纵。调整语句以引用最近的数据步骤而不是#"Added index"

+0

非常感谢@ @ ylyn! – MrDark

相关问题