如何使用PowerQuery重排数据表结构得到含Market、MyValue列的目标表
解决方案:单查询直接实现目标格式,无需拆分后合并
完全可以通过单条PowerQuery查询完成该需求,核心逻辑是先逆透视所有非国家列,再拆分属性列、透视指标类型,步骤更简洁,也不会出现合并匹配错误的问题。
界面操作步骤(无需手写代码即可完成)
假设你的原始表结构为:第1列是国家,其余列命名规则为[产品类别]_[指标类型](比如手机_Market、手机_MyValue、电脑_Market等),按以下顺序操作:
- 导入原始数据表到PowerQuery编辑器
- 选中
国家列,右键选择「逆透视其他列」,此时你会得到三列:国家、属性、值 - 选中
属性列,点击「转换」选项卡 -> 「拆分列」-> 「按分隔符」,分隔符选下划线_,拆分位置选「每次出现分隔符时」,拆分后得到两列,默认命名为属性.1、属性.2,分别重命名为产品类别、指标类型 - 选中
指标类型列,点击「转换」选项卡 -> 「透视列」,值列选值,聚合值函数选「不要聚合」 - 此时自动生成的结果就是你需要的
国家、产品类别、Market、MyValue四列目标表
示例M代码参考
你可以根据自己的原始表名、列名调整对应参数:
let // 替换下一行的"原始表"为你自己的数据源表名 源 = Excel.CurrentWorkbook(){[Name="原始表"]}[Content], 逆透视其他列 = Table.UnpivotOtherColumns(源, {"国家"}, "属性", "值"), 拆分列 = Table.SplitColumn(逆透视其他列, "属性", Splitter.SplitTextByDelimiter("_", QuoteStyle.Csv), {"产品类别", "指标类型"}), 透视列 = Table.Pivot(拆分列, List.Distinct(拆分列[指标类型]), "指标类型", "值") in 透视列
拆分合并方案的正确操作逻辑
如果你的原始表列名不符合[产品]_[指标]的规则,一定要拆分处理的话,按以下步骤操作可避免合并错误:
- 拆分两个子表后,逆透视时除了国家列,保留子表对应的指标列名(比如Market子表逆透视后列是
国家、产品类别、Market,MyValue子表逆透视后是国家、产品类别、MyValue) - 合并时选择
国家和产品类别两个列作为匹配键,用内部联接或者完全外部联接,即可正确匹配不会错位
内容的提问来源于stack exchange,提问作者Cris77
相关产品推荐
相关产品推荐

