Power Query:如何为列表中的每一行添加列
Posted
技术标签:
【中文标题】Power Query:如何为列表中的每一行添加列【英文标题】:Power Query: how to add columns for each row in a list 【发布时间】:2020-05-12 17:40:08 【问题描述】:我有一个列,其中包含 power bi 中的一系列元素,如下所示: - 一个名为“列表”的 Excel 表格,其中包含一系列字母 - 一个名为“要添加的列”的 Excel 表,其中包含几列和几行要添加到我列表的每个字母中。
这是我的“列表”表的示例:
|---------------------|
| Name |
|---------------------|
| A |
|---------------------|
| B |
|---------------------|
| C |
|---------------------|
| D |
这是我的“要添加文件的列”的示例:
|---------------------|-----------------| -------------|-----------------|
| Pro1 | Pro2 | Pro3 | Pro4 |
|---------------------|-----------------| -------------|-----------------|
| 56 | dgdt | gdro1 | gggggro1 |
|---------------------|-----------------| -------------|-----------------|
| 56 | dgdt | gdro1 | gggggro1 |
|---------------------|-----------------| -------------|-----------------|
| 4 | dgdt | gdro1 | gggggro1 |
|---------------------|-----------------| -------------|-----------------|
| 4 | 4 4 4
对于每个元素,A,B...我正在尝试添加 4 列,它们位于另一个文件中。 对于每个字母,我会得到如下结果:
|---------------------|---------------------|-----------------| -------------|-----------------|
| Name | Pro1 | Pro2 | Pro3 | Pro4 |
|---------------------|---------------------|-----------------| -------------|-----------------|
| A | 56 | dgdt | gdro1 | gggggro1 |
|---------------------|---------------------|-----------------| -------------|-----------------|
| A | 56 | dgdt | gdro1 | gggggro1 |
|---------------------|---------------------|-----------------| -------------|-----------------|
| A | 4 | dgdt | gdro1 | gggggro1 |
|---------------------|---------------------|-----------------| -------------|-----------------|
| A | 4 | 4 4 4
到目前为止,我目前已经转置了我的列表,并重复了我想添加列的次数。
然后我为每个表创建一个索引,并将它们合并为两个文件的所有行的新查询。
但它不起作用,我不知道如何进行。
到目前为止,我的列有以下 M 代码,我需要为每个元素添加列:
#"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers"," Name ", type text),
#"Transposed Table" = Table.Transpose(#"Changed Type1"),
#"repeat Table" = Table.Repeat(#"Transposed Table",4),
#"Added Index" = Table.AddIndexColumn(#"repeat Table", "Index", 1, 1)
in
#"Added Index"
以下 m 代码用于我将两个文件与我添加到每个文件的索引合并到其中的列:
let
Source = Table.NestedJoin(#"columns to add", "Index", list, "Index", "list", JoinKind.FullOuter),
#"Expanded list" = Table.ExpandTableColumn(Source, "list", "Column1", "Column2", "Column3", "Column4", "Index", "list.Column1", "list.Column2", "list.Column3", "list.Column4", "list.Index")
in
#"Expanded list"
【问题讨论】:
【参考方案1】:为两个表中的每一个添加一个自定义列,为所有行设置为数字 1
使用新列将一个表与另一个表合并,合并类型 Full Outer(两者的所有行)
扩展并删除多余的列
let Part1 = Table.AddColumn(Table1, "Custom", each 1),
Part2 = Table.AddColumn(Table2, "Custom", each 1),
#"Merged Queries" = Table.NestedJoin(Part1,"Custom",Part2,"Custom","Part2",JoinKind.FullOuter),
#"Expanded Part2" = Table.ExpandTableColumn(#"Merged Queries", "Part2", "Pro1", "Pro2", "Pro3", "Pro4", "Pro1", "Pro2", "Pro3", "Pro4"),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Part2","Custom")
in #"Removed Columns"
更一般地适用于任意数量的列
let Part1 = Table.AddColumn(Table1, "Custom", each 1),
Part2 = Table.AddColumn(Table2, "Custom", each 1),
#"Merged Queries" = Table.NestedJoin(Part1,"Custom",Part2,"Custom","Part2",JoinKind.FullOuter),
ColumnsToExpand = List.RemoveLastN(List.Distinct(List.Combine(List.Transform(Table.Column(#"Merged Queries", "Part2"), each if _ is table then Table.ColumnNames(_) else ))),1),
#"Expanded Part2" = Table.ExpandTableColumn(#"Merged Queries", "Part2",ColumnsToExpand ,ColumnsToExpand ),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Part2","Custom")
in #"Removed Columns"
【讨论】:
它的作品!这是伟大的和令人沮丧的!我认为我对换位有一个好主意!我真的很难过没有更好......好吧,它实际上并没有工作......我的信件不再在这里,只有重复......以上是关于Power Query:如何为列表中的每一行添加列的主要内容,如果未能解决你的问题,请参考以下文章