为什么这个Power Query操作需要花费很多时间才能完成?

在前面的线程中 ,我从@teylyn那里得到了一些帮助,让这段代码运行起来。

对于查询的操作时间,我遇到了一些麻烦。

任务:

任务是将两个单独的联系人列表合并成一个全新的列表。

我还需要删除共享相同名称和公司名称的重复项。

最后,我需要删除共享相同CompanyID但公司名称不同的联系人。 主要清单中的联系人应保存以防发生冲突。

下面的代码工作,但需要很长时间才能完成。

该列表总共包含大约8500个联系人。

迭代每个联系人需要2.5秒,这个联系人将upp添加到大约6小时直到完成。

我的问题:

为什么这个操作需要这么长时间,有什么办法可以让它更快?

let Source = Table.Combine({PrimaryContacts, SecondaryContacts}), #"Removed duplicates" = Table.Distinct(Source, {"CompanyID", "FirstName", "LastName"}), #"Sorted rows" = Table.Sort(#"Removed duplicates",{{"CompanyID", Order.Ascending}, {"Email", Order.Descending}}), #"Filtered rows" = Table.SelectRows(#"Sorted rows", each ["FirstName"] <> null and ["FirstName"] <> ""), #"Added index" = Table.AddIndexColumn(#"Filtered rows", "Index", 10000, 1), #"Renamed columns" = Table.RenameColumns(#"Added index",{{"Index", "ContactID"}}), #"Reordered columns" = Table.ReorderColumns(#"Renamed columns",{"ContactID", "CompanyID", "CompanyName", "FirstName", "LastName}), // I have removed 10 columns for privacy reasons #"Added index1" = Table.AddIndexColumn(#"Reordered columns", "Index", 0, 1), #"Filtered rows1" = Table.SelectRows(#"Added index1", each (["ContactID"] = 10000 or ["ContactID"] = 10001 or ["ContactID"] = 10002 or ["ContactID"] = 10003 or ["ContactID"] = 10004 or ["ContactID"] = 10005)), /* The filter above is temporary to be able to check if next step works */ /* It is the step below that takes too much time to finish */ #"Add custom" = Table.AddColumn(#"Filtered rows1", "Delete", each if ["CompanyID"]= #"Reordered columns"{[Index]-1}["CompanyID"] and ["CompanyName"]<> #"Reordered columns"{[Index]-1}["CompanyName"] then "Delete" else null) in #"Add custom" 

第一行可能是[Index] = 0,所以[Index] – 1 = -1,这是超出范围的问题。

一般来说,使用行索引来引用表格行的效率并不高。 相反,最好添加2个索引列:1以0开始,另一个以1开始。接下来将表与自身合并,使用基于0的索引作为第一个表的键和基于1的索引作为键为第二张桌子。 因此,您将得到一个嵌套表的列,其中包含上一行的数据。 如果将此列命名为“Previous”并展开所需列,并使用原始名称作为前缀,则将当前行的字段与前一行的字段(前缀“前缀”)相邻,然后继续从那里。