Excel 电源查询;将 table 展开为列
Excel Power Query; Expand table into columns
我有两个 table 想要合并,但我无法完全按照我希望的方式进行合并。第一个是日期列表和一些数据,第二个是当天售出商品的排名以及售出数量等。我想将排名前 'x' 的商品作为列添加到我的每日数据中.我让合并开始工作,所以现在我有一个显示 'table.' 的列,但是如果我展开 table,每个项目都会变成它自己的行。相反,我希望 table 项目 2 用后缀重复它的所有列。
date
total_sales
items
1/1/21
000
table
1/2/21
000
table
date
total_sales
items_1
units_1
items_2
units_2
1/1/21
000
pens
15
pencils
10
1/2/21
000
erasers
35
pens
5
等等
我可以用 visual basic 做到这一点,但我认为这不是最好的方法。谢谢你的帮助!另外,我可以搜索此操作的特定术语吗?
假设您的第二个 table 看起来像这样:
首先,让我们按日期分组,对于每个组,我们对子table 进行排序和索引。 (这是最难的一步。)
一旦我们有了每个组的索引,就将该列展开回来,这样我们就回到了开头,除了新的索引列。
从这里,您可以过滤索引以仅获取前 N 个,然后逆透视 [items] 和 [units] 列。
合并[索引]和[属性]
然后转向 [Merged]
哒哒!现在您的数据已成形,因此您可以轻松地将其与第一个 table.
合并
这是此示例的完整代码。 (您可以将其粘贴到高级编辑器中并查看应用步骤。)
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQ31DcyMDJU0lEqSM0rBlKGpkqxOugSyZk5YDkDqJwRTC61KLE4tQgkZ2yKLgc1EMM8hB5sWqBWGSnFxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [date = _t, items = _t, units = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"date", type date}, {"items", type text}, {"units", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"date"}, {{"indexed", each Table.AddIndexColumn(Table.Buffer(Table.Sort(_, {{"units", Order.Descending}})), "Index", 1, 1, Int64.Type), type table}}),
#"Expanded indexed" = Table.ExpandTableColumn(#"Grouped Rows", "indexed", {"items", "units", "Index"}, {"items", "units", "Index"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded indexed", each [Index] < 3),
#"Unpivoted Columns1" = Table.UnpivotOtherColumns(#"Filtered Rows", {"date", "Index"}, "Attribute", "Value"),
#"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Unpivoted Columns1", {{"Index", type text}}, "en-US"),{"Attribute", "Index"},Combiner.CombineTextByDelimiter("_", QuoteStyle.None),"Merged"),
#"Pivoted Column1" = Table.Pivot(#"Merged Columns", List.Distinct(#"Merged Columns"[Merged]), "Merged", "Value"),
#"Changed Type1" = Table.TransformColumnTypes(#"Pivoted Column1",{{"items_1", type text}, {"units_1", Int64.Type}, {"items_2", type text}, {"units_2", Int64.Type}})
in
#"Changed Type1"
我唯一在做特殊 M 语言魔术(不仅仅是单击 GUI 中的东西)的地方是我通过对 sub-tables 之一应用几个步骤并粘贴 GUI-generated 代码逐步回到组中(加上 Table.Buffer 包装器以确保排序“坚持”)。
#"Grouped Rows" =
Table.Group(
#"Changed Type",
{"date"},
{
{"indexed", each
Table.AddIndexColumn(
Table.Buffer(
Table.Sort(_, {{"units", Order.Descending}})
),
"Index", 1, 1, Int64.Type
), type table
}
}
),
我觉得这个视频可以很好的解决你的问题。
Concatenate, Merge or Combine multiple rows into one value - Power Query for Power BI
我有两个 table 想要合并,但我无法完全按照我希望的方式进行合并。第一个是日期列表和一些数据,第二个是当天售出商品的排名以及售出数量等。我想将排名前 'x' 的商品作为列添加到我的每日数据中.我让合并开始工作,所以现在我有一个显示 'table.' 的列,但是如果我展开 table,每个项目都会变成它自己的行。相反,我希望 table 项目 2 用后缀重复它的所有列。
date | total_sales | items |
---|---|---|
1/1/21 | 000 | table |
1/2/21 | 000 | table |
date | total_sales | items_1 | units_1 | items_2 | units_2 |
---|---|---|---|---|---|
1/1/21 | 000 | pens | 15 | pencils | 10 |
1/2/21 | 000 | erasers | 35 | pens | 5 |
等等
我可以用 visual basic 做到这一点,但我认为这不是最好的方法。谢谢你的帮助!另外,我可以搜索此操作的特定术语吗?
假设您的第二个 table 看起来像这样:
首先,让我们按日期分组,对于每个组,我们对子table 进行排序和索引。 (这是最难的一步。)
一旦我们有了每个组的索引,就将该列展开回来,这样我们就回到了开头,除了新的索引列。
从这里,您可以过滤索引以仅获取前 N 个,然后逆透视 [items] 和 [units] 列。
合并[索引]和[属性]
然后转向 [Merged]
哒哒!现在您的数据已成形,因此您可以轻松地将其与第一个 table.
合并这是此示例的完整代码。 (您可以将其粘贴到高级编辑器中并查看应用步骤。)
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQ31DcyMDJU0lEqSM0rBlKGpkqxOugSyZk5YDkDqJwRTC61KLE4tQgkZ2yKLgc1EMM8hB5sWqBWGSnFxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [date = _t, items = _t, units = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"date", type date}, {"items", type text}, {"units", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"date"}, {{"indexed", each Table.AddIndexColumn(Table.Buffer(Table.Sort(_, {{"units", Order.Descending}})), "Index", 1, 1, Int64.Type), type table}}),
#"Expanded indexed" = Table.ExpandTableColumn(#"Grouped Rows", "indexed", {"items", "units", "Index"}, {"items", "units", "Index"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded indexed", each [Index] < 3),
#"Unpivoted Columns1" = Table.UnpivotOtherColumns(#"Filtered Rows", {"date", "Index"}, "Attribute", "Value"),
#"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Unpivoted Columns1", {{"Index", type text}}, "en-US"),{"Attribute", "Index"},Combiner.CombineTextByDelimiter("_", QuoteStyle.None),"Merged"),
#"Pivoted Column1" = Table.Pivot(#"Merged Columns", List.Distinct(#"Merged Columns"[Merged]), "Merged", "Value"),
#"Changed Type1" = Table.TransformColumnTypes(#"Pivoted Column1",{{"items_1", type text}, {"units_1", Int64.Type}, {"items_2", type text}, {"units_2", Int64.Type}})
in
#"Changed Type1"
我唯一在做特殊 M 语言魔术(不仅仅是单击 GUI 中的东西)的地方是我通过对 sub-tables 之一应用几个步骤并粘贴 GUI-generated 代码逐步回到组中(加上 Table.Buffer 包装器以确保排序“坚持”)。
#"Grouped Rows" =
Table.Group(
#"Changed Type",
{"date"},
{
{"indexed", each
Table.AddIndexColumn(
Table.Buffer(
Table.Sort(_, {{"units", Order.Descending}})
),
"Index", 1, 1, Int64.Type
), type table
}
}
),
我觉得这个视频可以很好的解决你的问题。
Concatenate, Merge or Combine multiple rows into one value - Power Query for Power BI