【问题标题】:How do I combine values from two adjacent rows in Power Query?如何在 Power Query 中合并两个相邻行的值?
【发布时间】:2017-05-14 22:41:59
【问题描述】:

我有一个这种格式的地址列表:

|ID|AddrType|Company|FName |LName |Address
| 1|Visiting|ACME   |Willie|Coyote|Sand Rd 10
| 1|Delivery|ACME   |Road  |Runner|Sand Rd 20
| 2|Visiting|Go Nuts|Chip  |Munk  |Tree Rd 3
| 3|Visiting|In Sane|Dale  |Munk  |Tree Rd 5

仅当收货地址与访问地址不同时,才会显示收货类型地址行。 因此,每个公司 ID 的地址数量可能不同

我想得到这样的结果:

|ID|V_Company|V_FName|V_LName|V_Address |D_Company|D_FName|D_LName|D_Address
| 1|ACME     |Willie |Coyote |Sand Rd 10|ACME     |Road   |Runner |Sand Rd 20
| 2|Go Nuts  |Chip   |Munk   |Tree Rd 3 |Go Nuts  |Chip   |Munk   |Tree Rd 3
| 3|In Sane  |Dale   |Munk   |Tree Rd 5 |In Sane  |Dale   |Munk   |Tree Rd 5

我尝试过使用转置,但失败了,如下链接所述: https://community.powerbi.com/t5/Desktop/Merge-2-rows-in-one-row/m-p/46361#M18144

如果下一行的 AddrType 值为 Delivery,我也尝试创建自定义列,但未能从下一行获取值。

= Table.AddColumn(#"Sorted columns", "D_FName", each if [AddrTyp]="Delivery" then [FName]{[Index]+1} else FName)

我将此链接用作 visdom bu 的来源,但成功有限: http://excel-inside.pro/blog/2015/11/05/absolute-and-relative-references-in-power-query/

我确信有一种简单的方法可以得到我想要的东西。我现在依靠您的经验和知识来解决它。

请帮帮我!

【问题讨论】:

    标签: powerquery m


    【解决方案1】:

    创建具有第二个地址的表:按 AdressType 对 AddressList 排序(升序,因此 Delivery 将首先出现),缓冲并删除重复项。

    剩下的代码应该很明显了:

    查询“SecondAdresses”:

    let
        Source = AddressList,
        Sorted = Table.Buffer(Table.Sort(Source,{{"AddrType", Order.Ascending}})),
        SelectDistinct = Table.Distinct(Sorted, {"ID"}),
        D_Headers = Table.TransformColumnNames(SelectDistinct, each "D_"&_)
    in
        D_Headers
    

    查询“结果”:

    let
        Source = AddressList,
        SelectVisiting = Table.SelectRows(Source, each ([AddrType] = "Visiting")),
        RemovedAddressType = Table.RemoveColumns(SelectVisiting,{"AddrType"}),
        V_Headers = Table.TransformColumnNames(RemovedAddressType, each "V_"&_),
        Merged = Table.NestedJoin(V_Headers,{"V_ID"},SecondAddresses,{"D_ID"},"NewColumn",JoinKind.LeftOuter),
        Expanded = Table.ExpandTableColumn(Merged, "NewColumn", {"D_Company", "D_FName", "D_LName", "D_Address"}, {"D_Company", "D_FName", "D_LName", "D_Address"}),
        RenamedID = Table.RenameColumns(Expanded,{{"V_ID", "ID"}})
    in
        RenamedID
    

    【讨论】:

    • 感谢您的大开眼界!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2020-06-19
    相关资源
    最近更新 更多