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

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

和
MyValue

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

发布于 2021-10-24 19:49:55
你们关系很好。
在取消枢轴之后,您需要创建一个自定义列,您可以在该列上枢轴,还需要修改结果"attribute“列中的名称。
阅读代码中的注释,并探索Applied窗口来理解算法
M码
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希望这就是你想要的结果

发布于 2021-10-31 17:37:51
非常感谢你花时间来帮助我。
我想我用List.Zip函数解决了我的问题。解决方案不是我的,但我是从这视频中拿来的。有了这个技巧,我甚至不必将原始源数据分成两个表(market & MyShare)。
它能很好地完成我所需要的
https://stackoverflow.com/questions/69699703
复制相似问题