如何使用 PowerQuery 对合并单元格进行逆透视和透视

问题描述 投票:0回答:1

我的任务是从导出中获取数据并将其转换为报告。我最初的想法是用VBA来做,但我想我可以用Power Query来做,问题是我对此知之甚少。但这就是我想做的。

在上面的示例中,您可以看到数据到达我的方式 第 1 行当前有 11 个不同的类别,其中 4 个单元格合并为 1 个。 当我使用 Power Query 输入它时,标题看起来像这样

AS BT
地区 管理区 面积 日期 二手 - AS 可用 - AS % 预订 - AS 状态 - AS 二手 - BT 可用 - BT % 预订 - BT 状态 - BT

我希望最终的结果是什么

2024 年 3 月 1 日 - 星期五 2024 年 3 月 2 日 - 星期六
地点 类别 总计 二手 可用 可用% 总计 二手 可用 可用%
P1 - 节点 100-500 AS 97 0 97 100% 1 0 1 100%
P1 - 节点 100-500 BT 2 0 2 100% 96 20 76 79%
  1. 第一行的类别将被放入一列中
  2. 总计将是可用和已用的总和
  3. 可用百分比是可用/总数
  4. 日期成为顶部的新分组
  5. 预订百分比和状态列可以删除

我相信为了完成我想要做的事情,我需要取消透视,然后重新透视数据。我遇到的问题是顶行中的合并单元格以及如何获取唯一列表、删除空值并移动到列

在使用 Pivot 和 unpivot 选项时,我尝试删除第一行 将新的第一行提升为标题,然后取消数据透视。

如果我能朝正确的方向踢一下,我将不胜感激,因为我不确定自己是否走在正确的轨道上。

excel office365 powerquery
1个回答
0
投票

看看这是否能给你带来任何想法

let   Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Removed Top Rows" = Table.Skip(Source,1),
#"Promoted Headers" = Table.PromoteHeaders(#"Removed Top Rows", [PromoteAllScalars=true]),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Promoted Headers", {"Region", "Mgmt Area", "Area", "Date"}, "Attribute", "Value"),
#"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Other Columns", "Attribute", Splitter.SplitTextByDelimiter(" - ", QuoteStyle.Csv), {"Type", "Category"}),
#"Removed Columns" = Table.RemoveColumns(#"Split Column by Delimiter",{"Region", "Mgmt Area"}),
#"Grouped Rows" = Table.Group(#"Removed Columns", {"Area", "Date", "Category"}, {
        {"total", each List.Sum(Table.SelectRows(_, each [Type] = "Avail" or [Type] = "Used")[Value])},
    {"avail", each List.Sum(Table.SelectRows(_, each [Type] = "Avail")[Value])},
    {"used", each List.Sum(Table.SelectRows(_, each [Type] = "Used")[Value])}

   }),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Available", each [avail]/[total],type number),
#"Changed Type" = Table.TransformColumnTypes(#"Added Custom",{{"Date", type date}}),
#"Unpivoted Other Columns1" = Table.UnpivotOtherColumns(#"Changed Type", {"Area", "Date", "Category"}, "Attribute", "Value"),
#"Added Custom1" = Table.AddColumn(#"Unpivoted Other Columns1", "Custom", each Text.From([Date]) & "-" &[Attribute]),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom1",{"Date", "Attribute"}),
#"Pivoted Column" = Table.Pivot(#"Removed Columns1", List.Distinct(#"Removed Columns1"[Custom]), "Custom", "Value", List.Sum)
in    #"Pivoted Column"

© www.soinside.com 2019 - 2024. All rights reserved.