Power Query实现行转列:将属性值拆分至对应列的方法
Power BI行式属性转列式布局解决方案
一、现有代码失效原因及修正
你的代码无法生效主要有两个问题:
- 拼写错误:将
diameter误写为Diamter,导致条件判断永远不成立,列值全为空 - 列名引用错误:
#["[value].Cell.Data.Element: Text"]写法有误,若你的值列实际名称是value,应直接用[value];若列名确实是带特殊字符的长名称,需用双引号包裹,格式为#"[value].Cell.Data.Element: Text"
修正后的单列添加代码(仅用于生成单独列,未实现同条目对齐):
= Table.AddColumn(#"Filtered Rows5", "Diameter", each if [name] = "diameter" then [value] else "")
同理可添加Radius和Length列,但这种方式无法自动将同一条目下的三个属性对齐到同一行,推荐用透视列完成需求。
二、正确的行转列(透视列)方法
这是实现行式属性转列式布局的最优方案,能自动将同一条目下的属性对齐到同一行:
操作步骤(可视化界面)
- 打开Power Query编辑器,选中目标表格
- 点击转换选项卡 → 选择透视列
- 在弹窗中配置:
- 属性列:选择
name - 值列:选择
value - 高级选项:根据需求选择聚合方式(若无重复属性值,选「不要聚合」即可)
- 属性列:选择
对应的M代码
= Table.Pivot(#"Filtered Rows5", List.Distinct(#"Filtered Rows5"[name]), "name", "value")
注:若你的表格没有用于分组的唯一标识列(如条目ID),需先添加分组依据(例如通过索引列生成分组ID),否则无法确保同一条目下的属性正确对齐。
内容的提问来源于stack exchange,提问作者what's_in_a_name
相关产品推荐
相关产品推荐

