如何按特定列值转置标题行值组

Sop*_*son 1 excel vba unpivot excel-formula powerquery

我在Excel中有一些数据,格式如下:

Cust_Name    Prod1     Prod2    Prod3     Prod4    Prod5
A            0         100      120       0        0
B            145       120      168       0        200
C            350       300      0        340       0
Run Code Online (Sandbox Code Playgroud)

我需要将以下格式转换为下面提到的报告格式。

我想将这些产品转置到 Cust_Name 列组中,其值 >0,否则它不应该成为最终输出报告的一部分。

我尝试了很多枢轴选项,但没有成功。

所需输出:

Cust_Name      Product       Price
A              Prod2         100
               Prod3         120
Total A        -             220
B              Prod1         145
               Prod2         120
               Prod3         168
               Prod5         200
Total B        -             633
C              Prod1         350
               Prod2         300
               Prod4         340
Total C        -             890
Run Code Online (Sandbox Code Playgroud)

Fle*_*ata 5

您可以使用 PowerQuery 来完成此操作。

选择源数据中的任意单元格。使用数据>获取和转换数据>从表/范围。

PowerQuery 编辑器将打开,如下所示:

在此输入图像描述

通过单击列标题选择 Cust_Name 列。使用“变换”>“逆透视列”>“逆透视其他列”:

在此输入图像描述

此时,可以选择过滤“值”列以排除 0。

现在使用“主页”>“关闭并加载”将数据放回工作簿中。

您现在可以创建一个数据透视表来获取小计:

在此输入图像描述

以下是 PowerQuery 编辑器中“高级编辑器”对话框中的查询:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Cust_Name", type text}, {"Prod1", Int64.Type}, {"Prod2", Int64.Type}, {"Prod3", Int64.Type}, {"Prod4", Int64.Type}, {"Prod5", Int64.Type}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Cust_Name"}, "Attribute", "Value")
in
    #"Unpivoted Other Columns"
Run Code Online (Sandbox Code Playgroud)