Excel 为什么这个电源查询操作需要这么长时间才能完成?

Excel 为什么这个电源查询操作需要这么长时间才能完成?,excel,optimization,powerquery,m,Excel,Optimization,Powerquery,M,我从@teylyn那里得到了一些帮助,以使这段代码正常工作 关于查询的操作时间,我遇到了更多的问题 任务: 任务是将两个单独的联系人列表合并成一个全新的列表 我还需要删除重复谁共享相同的名称和公司名称 最后,我需要删除共享同一公司ID但公司名称不同的联系人。应保留主列表中的联系人,以防发生冲突 下面的代码可以工作,但需要很长时间才能完成 该列表共包含约8500个联系人 每次接触需要2.5秒的时间,这会将upp增加到大约6小时,直到完成为止 我的问题: 为什么这个手术要花这么长时间,有没有办法让它

我从@teylyn那里得到了一些帮助,以使这段代码正常工作

关于查询的操作时间,我遇到了更多的问题

任务:

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

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

最后,我需要删除共享同一公司ID但公司名称不同的联系人。应保留主列表中的联系人,以防发生冲突

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

该列表共包含约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"
let
Source=Table.Combine({PrimaryContacts,SecondaryContacts}),
#“删除的重复项”=表.Distinct(源,{“CompanyID”、“FirstName”、“LastName”}),
#“排序行”=表.Sort(#“删除的重复项”、{{“CompanyID”、Order.Ascending}、{“Email”、Order.Ascending}),
#“筛选行”=表格。选择行(#“排序行”,每个[“FirstName”]为空,每个[“FirstName”]”),然后选择,
#“添加的索引”=表.AddIndexColumn(#“筛选行”,“索引”,10000,1),
#“重命名列”=Table.RenameColumns(#“添加索引”、{{“索引”、“联系人ID”}),
#“重新排序的列”=表。重新排序的列(#“重命名的列”、{“ContactID”、“CompanyID”、“CompanyName”、“FirstName”、“LastName}),//出于隐私原因,我删除了10列
#“Added index1”=表.AddIndexColumn(#“重新排序的列”,“索引”,0,1),
#“筛选行1”=表格。选择行(#“添加索引1”,每个行([“联系人ID”]=10000或[“联系人ID”]=10001或[“联系人ID”]=10002或[“联系人ID”]=10003或[“联系人ID”]=10004或[“联系人ID”]=10005)),
/*上面的过滤器是临时的,可以检查下一步是否有效*/
/*下面的步骤需要花费太多时间才能完成*/
#“添加自定义”=Table.AddColumn(#“筛选行1”、“删除”,如果[“公司ID”]=#“重新排序的列”{[Index]-1}[“公司ID”]和[“公司名称”]#“重新排序的列”{[Index]-1}[“公司名称”]然后“删除”否则为空)
在里面
#“添加自定义”

第一行[Index]=0可能有问题,因此[Index]-1=-1超出范围

通常,使用行索引引用表行不是很有效。 相反,最好添加两个索引列:1从0开始,另一个从1开始。接下来,将表与自身合并,使用基于0的索引作为第一个表的键,使用基于1的索引作为第二个表的键。因此,将得到一个包含上一行数据的嵌套表列。如果命名此列“Previous”并展开所需列,使用原始名称作为前缀,当前行中的字段与前一行中的字段(前缀为“Previous”)相邻并从那里继续