在Excel中使用PowerQuery旋转多个列

我试图转换下表中的多列:

在这里输入图像说明

我想得到的结果如下: 在这里输入图像说明

我在Excel中使用PowerQuery,但我无法pipe理多个列(也就是说,例如,我可以透视“数字”列)。 任何人都有正确的使用PowerQuery的洞察力?

这是你的问题的第一个版本的答案

let src = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], lettersABC=List.Distinct(src[Attribute1]), count=List.Count(lettersABC), lettersNUM=List.Transform({1..count}, each "Letter"&Number.ToText(_)), numbersNUM=List.Transform({1..count}, each "Number"&Number.ToText(_)), group = Table.Group(src, {"ID"}, {{"attr", each Record.FromList(lettersABC&[Attribute2], lettersNUM&[Attribute1])}}), exp = Table.ExpandRecordColumn(group, "attr", lettersNUM&lettersABC, lettersNUM&numbersNUM) in exp 

在这里输入图像说明

例如,如果国家/地区标题在单元格A1则此公式在D2

 = "tax rate" & CountIf( $A$2:$A2, $A2 ) 

然后复制公式单元格D2并将其粘贴到下面的单元格中,它应该给你类似的东西:

 country tax rate Income thresholds count UK 20% 35k tax rate1 UK 30% 50k tax rate2 ..... 

现在,您可以通过数据透视表或PowerQuery的额外计数列进行调整。 您可以在收入th1,收入th2等列中使用相同的公式。

以下是使用PQfunction区的解决scheme,但请注意最后一步(分组依据)不是dynamic的,例如,如果您需要每个国家/地区4 + 4列,则必须更改。

 let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"country", type text}, {"tax rate", type number}, {"Income thresholds", type text}}), #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1), #"Grouped Rows" = Table.Group(#"Added Index", {"country"}, {{"Min Index", each List.Min([Index]), type number}, {"All Rows", each _, type table}}), #"Expanded All Rows" = Table.ExpandTableColumn(#"Grouped Rows", "All Rows", {"Income thresholds", "Index", "tax rate"}, {"Income thresholds", "Index", "tax rate"}), #"Added Custom" = Table.AddColumn(#"Expanded All Rows", "Column Index", each [Index] - [Min Index] + 1), #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Min Index", "Index"}), #"Duplicated Column" = Table.DuplicateColumn(#"Removed Columns", "Column Index", "Column Index - Copy"), #"Added Prefix" = Table.TransformColumns(#"Duplicated Column", {{"Column Index", each "tax rate" & Text.From(_, "en-AU"), type text}}), #"Pivoted Column" = Table.Pivot(#"Added Prefix", List.Distinct(#"Added Prefix"[#"Column Index"]), "Column Index", "tax rate", List.Max), #"Added Prefix1" = Table.TransformColumns(#"Pivoted Column", {{"Column Index - Copy", each "Income thresholds" & Text.From(_, "en-AU"), type text}}), #"Pivoted Column1" = Table.Pivot(#"Added Prefix1", List.Distinct(#"Added Prefix1"[#"Column Index - Copy"]), "Column Index - Copy", "Income thresholds", List.Max), #"Grouped Rows1" = Table.Group(#"Pivoted Column1", {"country"}, {{"tax rate1", each List.Max([tax rate1]), type number}, {"tax rate2", each List.Max([tax rate2]), type number}, {"tax rate3", each List.Max([tax rate3]), type number}, {"Income th1", each List.Max([Income thresholds1]), type text}, {"Income th2", each List.Max([Income thresholds2]), type text}, {"Income th3", each List.Max([Income thresholds3]), type text}}) in #"Grouped Rows1"