Power Query:如何为列表中的每一行添加列

Power Query: how to add columns for each row in a list

我在 power bi 中有一列包含一系列元素,如下所示: - 一个名为 "list" 的 excel sheet 带有一系列字母 - 一个名为 "columns to add" 的 excel sheet,其中有几列和几行要添加到我列表的每个字母中。

这是我的例子 "list" sheet:

  |---------------------|  
  |       Name          |  
  |---------------------|
  |         A           |    
  |---------------------|
  |         B           |     
  |---------------------|
  |         C           |    
  |---------------------|
  |        D            |     

这是我的例子 "columns to add file":

                        |---------------------|-----------------| -------------|-----------------|   
                        |      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

到目前为止,我目前已经调换了我的列表,并重复了我想添加列的次数。

然后我为每个 table 创建了一个索引,并将它们合并为两个文件的所有行的新查询。

但是不行,不知道怎么办。

到目前为止,我的列有以下 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"

为两个 table 中的每一个添加一个自定义列,为所有行设置为数字 1

使用新列将一个 table 与另一个合并,合并类型 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"