所以我有一张这样的表,我想将其拆分成具有相同 ID 的每个项目的单独交易。本质上,我们将有 3 行,其中订单 ID 为 1,但一行包含钢笔,一行包含铅笔,一行包含尺子。其余的类似。
订单编号 | 类别 | 数量 |
---|---|---|
1 | 钢笔、铅笔、尺子 | 1,2,3 |
2 | 尺子、橡皮 | 3,2 |
3 | 指南针、钢笔、橡皮擦 | 4,1,2 |
4 | 钢笔铅笔 | 1,2 |
这就是我想要的表格的样子(我只会做前几行)
订单编号 | 类别 | 数量 |
---|---|---|
1 | 笔 | 1 |
1 | 铅笔 | 2 |
1 | 统治者 | 3 |
我设法通过一种方式做到这一点,首先使用带有分隔符的文本到列来分隔类别和金额位。然后从这里我使用转置复制和粘贴数据,并移动数据以获得我想要的表格。
我想知道是否有更简单、更快捷、更好的方法来做到这一点,因为这对于大型数据集来说并不理想。
谢谢。
答案1
您可以使用 Windows Excel 2010+ 和 Excel 365(Windows 或 Mac)中的 Power Query 来实现此目的
使用 Power Query
- 在数据表中选择一些单元格
Data => Get&Transform => from Table/Range
或者from within sheet
- 当 PQ 编辑器打开时:
Home => Advanced Editor
- 记下表格姓名在第 2 行
- 将下面的 M 代码粘贴到您所看到的位置
- 将第 2 行的表名改回最初生成的表名。
- 阅读评论并探索
Applied Steps
以了解算法
let
//Change next line to reflect your actual data source
Source = Excel.CurrentWorkbook(){[Name="Table24"]}[Content],
//set the data types
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Order ID", Int64.Type}, {"Category", type text}, {"Amount", type text}}),
//Add custom column where the contents of the Category and Amount column are combined into a single list
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each List.Zip({Text.Split([Category],","), Text.Split([Amount],",")})),
//Remove the original category and amount columns
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Category", "Amount"}),
//Expand the list column into rows (each one will have a list corresponding to a single pair of Category/Amount
#"Expanded Custom" = Table.ExpandListColumn(#"Removed Columns", "Custom"),
//Create a two-element comma-separated text string from each list
#"Extracted Values" = Table.TransformColumns(#"Expanded Custom", {"Custom",
each Text.Combine(List.Transform(_, Text.From), ","), type text}),
//Split the text string, by the comma, into two rows
#"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Custom",
Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Category", "Amount"}),
//set the data types
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Category", type text}, {"Amount", Int64.Type}})
in
#"Changed Type1"