【问题标题】:Power Query - matching columns from different tables to reconcile dataPower Query - 匹配来自不同表的列以协调数据
【发布时间】:2022-12-21 08:29:05
【问题描述】:

我正在尝试协调一些项目数据。我有一个主表,我在其中提取了需要协调的项目。在表 1 中,项目名称有一个额外的标签或标识符,表 2 中有没有标签的“匹配”项目。我正在尝试匹配项目,以便我可以更新其他列中的值并最终用更改替换主表中的项目。

问题:有没有有效的方法来做到这一点?我需要每月进行一次。

例子: 表 1 - 带有标签/项目标识符(AB 或 DDPC)

Project Name Profit Hours Sales
PROJ123AB - GeneralStoreFront 100 15 1000
PROJ123 - DDPCGeneralStoreBack 100 5 200
PROJ999AB - MerchStoreFrontDDPC 100 5 800
PROJ999AB - MerchStoreBack 100 10 500
PROJ111 - AllStoresDDPC 100 10 500
PROJ999-01AB - MerchStore123 100 10 500
PROJ111-01AB - AllStores123DDPC 100 10 500

表 2 - 无标签/项目标识符

Project Name Profit Hours Sales
PROJ123 - GeneralStoreFront 125 50 2000
PROJ123 - GeneralStoreBack 200 15 500
PROJ999 - MerchStoreFront 50 50 300
PROJ999 - MerchStoreBack 200 10 200
PROJ111 - AllStores 10 10 100
PROJ999-01 - MerchStore123 100 10 500
PROJ111-01 - AllStores123 100 10 500

我尝试将表 1 中的项目名称列拆分为仅用于项目编号(ex PROJ123),表 2 也是如此,然后在表 2 中创建了一个自定义列,其中 IF 语句引用回表 1 项目名称(仅包含 PROJ#)但这些值没有正确返回。

例子: = Table.AddColumn(#"Renamed Columns1", "NEW Sales", each if #"Table1"[PROJ] = [PROJ] then #"Table1"[Sales] else "no match").但这对所有行都返回了“不匹配”。

理想情况下,决赛桌应该是这样的:

Project Name Profit Hours Sales
PROJ123 - GeneralStoreFront 112.5 65 1000
PROJ123 - GeneralStoreBack 150 20 200
PROJ999 - MerchStoreFront 75 55 800
PROJ999 - MerchStoreBack 150 20 500
PROJ111 - AllStores 55 20 500
PROJ999-01 - MerchStore123 100 20 500
PROJ111-01 - AllStores123 100 20 500

***编辑:在每个表中再添加 2 行,以显示项目名称的另一种变体,并说明在找到匹配的项目“对”后我需要对其他列做什么。

两个项目“对”之间的平均利润栏。 两个项目“对”之间的小时数列相加。 Sales 列使用表 1 [Sales] 中的值。

TIA

【问题讨论】:

    标签: powerquery data-cleaning string-matching


    【解决方案1】:

    编辑答案

    let Source = Table1 & Table.RemoveColumns(Table2,{"Sales"}),
    #"Replaced Value1" = Table.ReplaceValue(Source,"AB","",Replacer.ReplaceText,{"Project Name"}),
    #"Replaced Value2" = Table.ReplaceValue(#"Replaced Value1","DDPC","",Replacer.ReplaceText,{"Project Name"}),
    #"Grouped Rows" = Table.Group(#"Replaced Value2", {"Project Name"}, {
        {"Profit", each List.Average([Profit]), type number},
        {"Hours", each List.Sum([Hours]), type number},
        {"Sales", each List.Sum([Sales]), type nullable number}})
    in #"Grouped Rows"
    

    方法:从表 2 中删除 sales 列。附加表 1。将文​​本 AB 替换为 null。将文本 DDPC 替换为空值。根据需要分组并取总和/平均值。您可以从界面执行的基本 powerquery 操作

    【讨论】:

    • 谢谢@horseyride。我尝试了您的解决方案,发现表 1 中的项目名称(额外子代码)有另一个变体。我编辑了我的 OP 以反映这一点。有没有一种方法可以查找子字符串“AB”并改为修剪它?此外,您的结果表还有另外 3 行。这 3 个项目应该与其他项目分组,但由于额外的“DDPC”标签而没有。
    • 编辑的答案。如果这不起作用,也许其他人可以帮助您。在发布答案后更改问题和要求不是好的形式。
    猜你喜欢
    • 2022-06-11
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多