在Power Query中组合列而不分割成多个查询和追加

我有一些报告,我正在处理与权力查询,我有一个解决scheme,但我希望这里的巫师有一个更好的方法。

在下面的例子中,我当前的方法是分成3个查询,只有连接,名称和logging号,以及一个项目和值(删除.1,.2,.3所以标题logging是相同的)然后我将它们一起追加到一个查询中,将数据转移,然后加载到一个表中。 对于某些文件,我会多次执行这个操作,为了回收查询,我必须分别复制每个文件(我不擅长调用函数)。 在一个查询中有没有更好的方法来完成这个工作,最好是通过界面进行,这样我就可以和我的队友分享比我更新的东西了。 我知道分组function是有潜力的,但我并不擅长使用这些工具(还)。 有关示例表,请参阅下面的谷歌表格:

https://docs.google.com/spreadsheets/d/14f-7GjUMwwzcUj9sAFBxaPjLnOW_1hKBYPtelRHfr70/edit?usp=sharing

有趣的问题。 经过几次试验,我设法在单个查询中完成。

查询:

let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZY49D4MgEIb/C7MLYL9m07GNadwMw9UwmKLXACb67z1sbaAMR9477rk8bcuafmAF45zTW+ux6w0FSVWB6SYDHm34p2r07J+IL4pHpooUfUxG74sVDm9wjpIInYUFRwrnDLqj19+LYfNqwW1Hyo/LNg7MDewSGiFiyfJfUqSSp5zdLUViKWPLS05FmjLWPPw0JVNqBQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Name = _t, Record = _t, Item.1 = _t, Value.1 = _t, Item.2 = _t, Value.2 = _t, Item.3 = _t, Value.3 = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Record", Int64.Type}, {"Item.1", type text}, {"Value.1", Int64.Type}, {"Item.2", type text}, {"Value.2", Int64.Type}, {"Item.3", type text}, {"Value.3", Int64.Type}}), #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Name", "Record", "Value.1", "Value.2", "Value.3"}, "Attribute", "Value"), #"Renamed Columns" = Table.RenameColumns(#"Unpivoted Columns",{{"Attribute", "ItemKey"}, {"Value", "Item"}}), #"Unpivoted Columns1" = Table.UnpivotOtherColumns(#"Renamed Columns", {"Name", "Record", "ItemKey", "Item"}, "Attribute", "Value"), #"Renamed Columns1" = Table.RenameColumns(#"Unpivoted Columns1",{{"Attribute", "ValueKey"}}), #"Filtered Rows" = Table.SelectRows(#"Renamed Columns1", each Text.EndsWith([ItemKey], Text.End([ValueKey], 1))), #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"ItemKey", "ValueKey"}), #"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[Item]), "Item", "Value", List.Sum) in #"Pivoted Column" 

结果:

结果

有点解释:

  • 在所有项目列上取消转向
  • 在所有Value列上都不透明(所以在这里它会创buildnxn行logging)
  • 在ItemKey与ValueKey匹配的logging上过滤(例如Item.1 = Value.1等)
  • 删除ItemKey和ValueKey列
  • 将项目列作为标题以Value作为值进行旋转

不是最好的解决scheme,因为它创造了额外的logging,但涉及的手动工作less得多,这应该解决您的问题。

PS#“筛选行”涉及一些内置function,但在用户界面中不可用,而且如果您的实际数据对于每条logging具有多于9个项目值对,则可能需要对其进行自定义。 (因为我只是比较键的最后一个字符)

这就是我所看到的:

 let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], //Add index for each row of source column. Use Add Index Column #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1), //Unpivot table #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index", "Name", "Record"}, "Attribute", "Value"), //At this step I corrected default column names in formula editor. // Also, it is important to have only 1 dot in column names. #"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Other Columns","Attribute",Splitter.SplitTextByEachDelimiter({"."}, QuoteStyle.Csv, false),{"ColumnName", "ColumnIndex"}), //As a result we get old column names clean of numbers in one column, and index of each column in another //Next we combine row index and column index in order to generate identifier for new row. Add custom column, write Text.From([Index]) & Text.From([ColumnIndex]) in formula window #"Added Custom" = Table.AddColumn(#"Split Column by Delimiter", "Idx", each Text.From([Index]) & Text.From([ColumnIndex])), //some cleanup #"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"Idx", "Name", "Record", "ColumnName", "Value"}), // Pivot columns back. Without row identifier this won't work! #"Pivoted Column" = Table.Pivot(#"Removed Other Columns", {"Item", "Value"}, "ColumnName", "Value"), //Step on ColumnNames, select Pivot, Value as values column, Don't Aggregate as function. #"Removed Columns" = Table.RemoveColumns(#"Pivoted Column",{"Idx"}), //Finally, Pivot to the desired look. #"Pivoted Column1" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[Item]), "Item", "Value", List.Sum) //Step on Item, select Pivot, Value as values column, Sum or Don't Aggregate as function. in #"Pivoted Column1" 

这将需要一些公式写在步骤“添加自定义”。

这将适用于任何合理数量的item.x-value.x列对。