首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PowerQuery重构表

用PowerQuery重构表
EN

Stack Overflow用户
提问于 2021-10-24 18:36:34
回答 2查看 69关注 0票数 1

我正在PowerQuery中移动我的第一步,所以这是我的问题。我有一个原始数据表,其中列出了国家和某些产品。对于每一种产品,都有一个“市场”值,后面跟着一个MyValue (指我自己在那个国家的产品销售)。这里有一个例子:

原始表

我在PowerQuery中试图获得的是一个表,它取消了产品类别,并留下了两列,一列用于市场,另一列用于MyValue。我尝试了很多种方法,最接近我能得到的结果是将原始表分成两部分,一张用于市场,另一份用于MyValues。然后,在PowerQuery中将其中的每一个解压缩,这样我就可以这样得到它们:

市场

MyValue

然后我试着把这两个表合并,但没能算出来。当然,我可以手动完成这一操作,但是我确信有一种方法可以用PowerQuery来完成,要么分割成两个表,然后取消旋转,然后合并,或者--更好的是--使用一个查询。我想要的结果是

期望结果

EN

回答 2

Stack Overflow用户

发布于 2021-10-24 19:49:55

你们关系很好。

在取消枢轴之后,您需要创建一个自定义列,您可以在该列上枢轴,还需要修改结果"attribute“列中的名称。

阅读代码中的注释,并探索Applied窗口来理解算法

M码

代码语言:javascript
复制
let
    Source = Excel.CurrentWorkbook(){[Name="rawTable"]}[Content],

//generalized "typer" in case you add other Items
    #"Changed Type" = Table.TransformColumnTypes(Source,{
        {"Country", type text}, {"Date", type date}} & 
        List.Transform(List.RemoveFirstN(Table.ColumnNames(Source),2),each {_, Int64.Type})),

//Unpivot all except Country|Date        
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Country", "Date"}, "Item", "Value"),

//Add Custom Column to create Pivot column for "Market" and "MyValue
    #"Added Custom" = Table.AddColumn(#"Unpivoted Other Columns", "Custom", each 
        if Text.StartsWith([Item],"My") 
        then "Market" 
        else "MyValue"),

//Replace "My" so Item Labels will be consistent
    #"Replaced Value" = Table.ReplaceValue(#"Added Custom","My","",Replacer.ReplaceText,{"Item"}),


//Pivot with no aggregation (unless you want to)
    #"Pivoted Column" = Table.Pivot(#"Replaced Value", List.Distinct(#"Replaced Value"[Custom]), "Custom", "Value"),

//Sort "Items" to original Column Order
    itemSortOrder = List.Distinct(#"Replaced Value"[Item]),
    sorted = Table.Sort(#"Pivoted Column",
        {{"Country", Order.Ascending},
        each List.PositionOf(itemSortOrder,[Item])
        })    
in
    sorted

希望这就是你想要的结果

票数 0
EN

Stack Overflow用户

发布于 2021-10-31 17:37:51

非常感谢你花时间来帮助我。

我想我用List.Zip函数解决了我的问题。解决方案不是我的,但我是从视频中拿来的。有了这个技巧,我甚至不必将原始源数据分成两个表(market & MyShare)。

它能很好地完成我所需要的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69699703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档