【问题标题】:Stack columns with Power Query使用 Power Query 堆叠列
【发布时间】:2021-02-06 21:28:52
【问题描述】:

我正在尝试在 Power BI 上堆叠如下所示的三列。 我的示例数据集如下:

Processo Finalidade 1 Finalidade 2 Finalidade 3
1 Maçã Banana Mamão
2 Banana
3 Mamão Banana

但是,我希望它保持这样:

Processo Finalidade
1 Maçã
2 Banana
3 Mamão
1 Banana
2
3 Banana
1 Mamão
2
3

我尝试转置列,但不能得到这个结果。

【问题讨论】:

  • 在电源查询中,选择 3 个 Finalidade 列并取消旋转它们。这将产生更接近您所需格式的内容。

标签: powerbi powerquery m


【解决方案1】:

根据您的输入数据和 cmets 中的提示,我这样做了

let
    Source = Excel.CurrentWorkbook(){[Name="tblData"]}[Content],
    Step1 = Table.TransformColumnTypes(Source,{{"Processo", Int64.Type}, {"Finalidade 1", type text}, {"Finalidade 2", type text}, {"Finalidade 3", type text}}),
    tblUnPivot = Table.ReplaceValue(Step1,null,"",Replacer.ReplaceValue,{"Finalidade 2"}),
    replaceValues = Table.ReplaceValue(tblUnPivot,null,"",Replacer.ReplaceValue,{"Finalidade 3"}),
    unpivot = Table.UnpivotOtherColumns(replaceValues, {"Processo"}, "Attribut", "Wert"),
    sorted = Table.Sort(unpivot,{{"Attribut", Order.Ascending}, {"Processo", Order.Ascending}}),
    removeCol = Table.RemoveColumns(sorted,{"Attribut"}),
    renameCol = Table.RenameColumns(removeCol,{{"Wert", "Finalidade"}})
in
    renameCol

结果看起来像

但解决方案很大程度上取决于列的命名Finalidade 1

PS另一种独立于列命名的解决方案可能如下所示

let
    Source = Excel.CurrentWorkbook(){[Name="tblData"]}[Content],
    Step1 = Table.TransformColumnTypes(Source,{{"Processo", Int64.Type}, {"Finalidade 1", type text}, {"Finalidade 2", type text}, {"Finalidade 3", type text}}),
    tblUnPivot = Table.ReplaceValue(Step1,null,"",Replacer.ReplaceValue,{"Finalidade 2"}),
    replaceValues = Table.ReplaceValue(tblUnPivot,null,"",Replacer.ReplaceValue,{"Finalidade 3"}),
    unpivot = Table.UnpivotOtherColumns(replaceValues, {"Processo"}, "Attribut", "Wert"),
    addColumn = Table.AddColumn(unpivot, "colPos", each List.PositionOf(Table.ColumnNames(Step1),[Attribut])),
    #"Neu angeordnete Spalten" = Table.ReorderColumns(addColumn,{"Processo", "colPos", "Attribut", "Wert"}),
    removeCol1 = Table.RemoveColumns(#"Neu angeordnete Spalten",{"Attribut"}),
    sortRows = Table.Sort(removeCol1,{{"colPos", Order.Ascending}, {"Processo", Order.Ascending}}),
    renameCol = Table.RenameColumns(sortRows,{{"Wert", "Fianlidade"}}),
    removeCol2 = Table.RemoveColumns(renameCol,{"colPos"})
in
    removeCol2

【讨论】:

    【解决方案2】:

    用一些字符替换 null。取消透视其他列。用 null 替换字符。删除多余的列

    let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Replaced Value" = Table.ReplaceValue(Source,null,"~~~",Replacer.ReplaceValue,{"Finalidade 1", "Finalidade 2", "Finalidade 3"}),
    #"Unpivoted Other Columns1" = Table.UnpivotOtherColumns(#"Replaced Value", {"Processo"}, "Attribute", "Value"),
    #"Replaced Value1" = Table.ReplaceValue(#"Unpivoted Other Columns1","~~~",null,Replacer.ReplaceValue,{"Value"}),
    #"Removed Columns" = Table.RemoveColumns(#"Replaced Value1",{"Attribute"})
    in #"Removed Columns"
    

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2021-09-19
      • 2018-01-19
      • 2020-05-31
      • 2023-02-05
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多