如何在 Power Query 中组合两个相邻行的值?
How do I combine values from two adjacent rows in Power Query?
我有一个这种格式的地址列表:
|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
我已经尝试过使用转置失败,如 link 中所述:
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)
我使用这个 link 作为 visdom 的来源,但收效甚微:
http://excel-inside.pro/blog/2015/11/05/absolute-and-relative-references-in-power-query/
我相信有一种简单的方法可以得到我想要的东西。我现在依靠你的经验和知识来解决它。
请帮帮我!
使用第二个地址创建一个 table:按 AdressType 对地址列表进行排序(升序,因此交付将排在第一位),缓冲并删除重复项。
其余代码应该很明显:
查询"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
查询"Result":
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
我有一个这种格式的地址列表:
|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
我已经尝试过使用转置失败,如 link 中所述: 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)
我使用这个 link 作为 visdom 的来源,但收效甚微: http://excel-inside.pro/blog/2015/11/05/absolute-and-relative-references-in-power-query/
我相信有一种简单的方法可以得到我想要的东西。我现在依靠你的经验和知识来解决它。
请帮帮我!
使用第二个地址创建一个 table:按 AdressType 对地址列表进行排序(升序,因此交付将排在第一位),缓冲并删除重复项。
其余代码应该很明显:
查询"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
查询"Result":
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