excel Power Query创建PIVOT,但每个透视列都应有其“子列”

pokxtpni  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(134)

标题解释:我有一个txt文件,我把它读入excel,创建一个查询来编辑它。我的txt文件是shop.txt,包含以下内容(* 1):
| 材料编号|商店|裤子|大小|裤子颜色|可用金额|性别问题|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 小行星621077453|目标|加大码|黑色|二十个|男性||
| 小行星621077453|乐购|加大码|黑色|十二|男性||
| 小行星623989211|目标|S型|黑色|二十二|男性||
| 小行星63013|利德尔|L型|黑色|二十一|女性||
| 小行星678048334|目标|男|红色|三十三|女性||
| 小行星678048334|乐购|男|红色|十五|女性||
| 小行星680603975|目标|S型|白色|三十|女性||
| 小行星680603975|乐购|S型|白色|二十个|女性||
| 小行星680603975|利德尔|S型|白色|三十三|女性||
| 小行星6888|目标|超高速|蓝色|三十二|男性||
| 小行星6888|利德尔|超高速|蓝色|十五|男性||
然后,我从range("A:F")创建查询,删除空值,并创建其透视版本:

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Material nr.", Int64.Type}, {"Shop", type text}, {"Trouser Size", type text}, {"Trouser Color", type text}, {"Available amount", Int64.Type}, {"Gender", type text}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([#"Material nr."] <> null)),
    #"Pivoted Column" = Table.Pivot(#"Filtered Rows", List.Distinct(#"Filtered Rows"[Shop]), "Shop", "Material nr.", List.Sum),
    #"Reordered Columns" = Table.ReorderColumns(#"Pivoted Column",{"Target", "Tesco", "Lidl", "Trouser Size", "Trouser Color", "Available amount", "Gender"})
in
    #"Reordered Columns"

它把我带到了this
我需要尽可能多的列许多不同的商店可用。但渔获物是:我需要每种材料只列出一次,并且每一个额外的数据(大小、颜色......)都应该与透视表的名称一起出现。手动命名它根本不是问题。如果我用我知道的唯一方法来命名,那么材料的额外数据就会被删除(所以我最后只剩下|材料编号|以及|商店|一起工作)。
我要查找的表类似于this.

这是可以实现的吗?我觉得这太混乱了。我几乎可以肯定在VBS中创建目标表是可能的,但是我正在尝试使用Power Query做得更好。
先谢谢你!

nxowjjhe

nxowjjhe1#

在Powerquery中试试这段代码。你取消透视,合并两列,然后透视回来。当其中有数据时,性别会显示为一列。

let  Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Shop", "Material nr"}, "Attribute", "Value"),
#"Merged Columns" = Table.CombineColumns(#"Unpivoted Other Columns",{"Shop", "Attribute"},Combiner.CombineTextByDelimiter("-", QuoteStyle.None),"Header"),
#"Pivoted Column" = Table.Pivot(#"Merged Columns", List.Distinct(#"Merged Columns"[Header]), "Header", "Value")
in  #"Pivoted Column"

请注意,如果您愿意,也可以直接读入文本文件,而无需先将数据加载到excel表中

let Source = Table.FromColumns({Lines.FromBinary(File.Contents("C:\Temp\a.txt"), null, null, 1252)}),
#"Split Column by Delimiter" = Table.SplitColumn(Source, "Column1", Splitter.SplitTextByDelimiter("___", QuoteStyle.Csv) ),
#"Promoted Headers" = Table.PromoteHeaders(#"Split Column by Delimiter", [PromoteAllScalars=true]),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Promoted Headers", {"Shop", "Material nr"}, "Attribute", "Value"),
#"Merged Columns" = Table.CombineColumns(#"Unpivoted Other Columns",{"Shop", "Attribute"},Combiner.CombineTextByDelimiter("-", QuoteStyle.None),"Header"),
#"Pivoted Column" = Table.Pivot(#"Merged Columns", List.Distinct(#"Merged Columns"[Header]), "Header", "Value")
in  #"Pivoted Column"

相关问题