PowerBI PowerQuery 逆透视指定类别值并拆分关联属性列
Power BI Power Query 同偏好维度数据匹配转换方案
核心问题出在之前直接用逆透视没有提取统一的关联键,仅靠行顺序匹配必然容易错位,只要先从Category字段拆分出「偏好序号」「属性类型」两个维度,用双字段精确关联就能100%保证数据匹配正确。
界面可视化操作步骤
- 导入原始数据源到Power Query编辑器,选中
Category列,点击顶部菜单栏「拆分列」→「按分隔符」,分隔符选择空格,拆分为3列,拆分后列名依次修改为PrefPrefix、PrefNo、AttrType,删除无业务意义的PrefPrefix列。此时每一行都会明确标记所属的偏好序号、属性类型(Region/Area/Station)。 - 筛选
AttrType列,仅保留值为Station的行,将这部分查询重命名为StationBase,作为最终结果的基础表。 - 基于拆分完的全量数据,筛选
AttrType列仅保留值为Region的行,只保留id、PrefNo、Value三列,将Value列重命名为Region,得到大区维度匹配表。 - 基于拆分完的全量数据,筛选
AttrType列仅保留值为Area的行,只保留id、PrefNo、Value三列,将Value列重命名为Area,得到片区维度匹配表。 - 选中
StationBase表,点击「合并查询」,关联条件设置为双字段匹配:StationBase表的id等于大区表的id、StationBase表的PrefNo等于大区表的PrefNo,联接类型选内部联接,合并完成后展开关联表的Region列,即可拿到对应行的大区值。 - 再次对
StationBase表执行合并查询,同样用id+PrefNo双字段关联片区匹配表,展开后拿到对应行的片区值。 - 调整列顺序,删除多余的
PrefNo、AttrType列,仅保留id、Category、Value、Region、Area五个字段,导出即为目标结果表。
快速实现:单查询M代码
如果不想逐步骤点击,可以打开Power Query高级编辑器,将下方代码替换原有内容,仅需把源步骤修改为你自己的数据源导入逻辑即可直接使用:
let 源 = 替换为你自己的数据源导入步骤, 拆分分类列 = Table.SplitColumn(源, "Category", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"PrefPrefix", "PrefNo", "AttrType"}), 清理冗余列 = Table.RemoveColumns(拆分分类列,{"PrefPrefix"}), 站点基础数据 = Table.SelectRows(清理冗余列, each [AttrType] = "Station"), 大区匹配数据 = Table.RenameColumns(Table.SelectRows(清理冗余列, each [AttrType] = "Region"),{{"Value", "Region"}}), 片区匹配数据 = Table.RenameColumns(Table.SelectRows(清理冗余列, each [AttrType] = "Area"),{{"Value", "Area"}}), 关联合并大区 = Table.NestedJoin(站点基础数据, {"id", "PrefNo"}, 大区匹配数据, {"id", "PrefNo"}, "大区关联数据", JoinKind.Inner), 展开大区字段 = Table.ExpandTableColumn(关联合并大区, "大区关联数据", {"Region"}, {"Region"}), 关联合并片区 = Table.NestedJoin(展开大区字段, {"id", "PrefNo"}, 片区匹配数据, {"id", "PrefNo"}, "片区关联数据", JoinKind.Inner), 展开片区字段 = Table.ExpandTableColumn(关联合并片区, "片区关联数据", {"Area"}, {"Area"}), 调整列顺序 = Table.ReorderColumns(展开片区字段,{"id", "Category", "Value", "Region", "Area"}), 清理输出 = Table.RemoveColumns(调整列顺序,{"PrefNo", "AttrType"}) in 清理输出
该方案全程使用
id+偏好序号作为唯一关联键,完全不依赖原始数据的行排列顺序,不会出现逆透视操作常见的匹配错位问题。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

