【问题标题】:Pivoting multiple columns using PowerQuery in Excel在 Excel 中使用 Power Query 透视多个列
【发布时间】:2016-09-11 01:32:35
【问题描述】:

我正在尝试旋转下表的多个列:

我想要得到的结果如下:

我在 Excel 中使用 PowerQuery,但我无法旋转多个列(例如,我可以旋转“数字”列)。有人对 PowerQuery 的正确用法有任何见解吗?

【问题讨论】:

  • 您想要的额外列似乎没有以任何方式进行透视。它们看起来就像所有行上具有相同值的额外列,因此您只需在 Pivot 之后添加具有这些值的额外列。
  • 如果多余的列在所有行中没有相同的值怎么办?
  • 那么你需要给出一个更好的例子和解释,因为你要达到的目标并不完全清楚。
  • 您可以复制 Letter 列并执行此示例中的操作 thebiccountant.com/2015/08/12/…
  • 示例改进!

标签: excel pivot powerquery


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

例如,如果国家/地区标题在单元格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
.....

现在,您可以使用 PivotTable 或 PowerQuery 通过该额外计数列进行透视。您可以对收入 th1、收入 th2 等列使用相同的公式。

【讨论】:

    【解决方案3】:

    这是使用 PQ 功能区的解决方案,但请注意最后一步(分组依据)不是动态的,例如如果您希望每个国家/地区有 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多