Power BI拆分固定格式文本列提取内嵌字段为独立列的方法
实现可行性判断
这个需求完全可以落地实现——目标列的文本遵循固定结构,三个待提取字段被固定的描述短语包裹,不存在结构变动、模糊匹配的风险,不管用Power Query做数据转换,还是用DAX写计算列,都能稳定批量提取独立的新列。
具体操作方法
优先推荐用Power Query实现,后续数据刷新时会自动同步提取新值,不需要重复手动操作;如果不想调整查询结构,也可以用DAX计算列完成轻量实现。
方法1:Power Query 转换(长期使用推荐)
- 在Power BI桌面端选中对应数据表,点击「转换数据」按钮打开Power Query编辑器
- 依次添加三个自定义列,公式里的原列名替换成你实际的列名即可:
- 提取User字段:
Text.BeforeDelimiter([你的原文本列名], " performed action on ")- 如果提取结果前后带格式方括号,再加一层清理:
Text.Trim(Text.BeforeDelimiter([你的原文本列名], " performed action on "), "[]")
- 如果提取结果前后带格式方括号,再加一层清理:
- 提取ActionItemId字段:
Text.BetweenDelimiters([你的原文本列名], " performed action on ", " in category ")- 带格式方括号的话套上面的清理公式即可
- 提取Category字段:
Text.AfterDelimiter([你的原文本列名], " in category ")- 带格式方括号就做同样的清理
- 提取User字段:
- 核对三个新列的提取结果无误后,点击「关闭并应用」即可,后续数据刷新时新列会自动按规则更新。
方法2:DAX 计算列(轻量快速实现)
如果不想进入Power Query调整数据结构,直接在数据视图下新建三个计算列,把公式里的表名、列名替换成实际值就能用:
- User列:
User = VAR 分隔位置1 = SEARCH(" performed action on ", '你的表名'[原文本列名]) RETURN LEFT('你的表名'[原文本列名], 分隔位置1 - 1)
- ActionItemId列:
ActionItemId = VAR 分隔位置1 = SEARCH(" performed action on ", '你的表名'[原文本列名]) VAR 内容起点 = 分隔位置1 + LEN(" performed action on ") VAR 分隔位置2 = SEARCH(" in category ", '你的表名'[原文本列名], 内容起点) RETURN MID('你的表名'[原文本列名], 内容起点, 分隔位置2 - 内容起点)
- Category列:
Category = VAR 分隔位置2 = SEARCH(" in category ", '你的表名'[原文本列名]) VAR 内容起点 = 分隔位置2 + LEN(" in category ") RETURN RIGHT('你的表名'[原文本列名], LEN('你的表名'[原文本列名]) - 内容起点 + 1)
注意:操作前建议抽3-5条实际单元格内容,核对固定分隔短语的拼写、空格数是否和模板完全一致;不要用按固定字符位置拆分的方式,因为不同长度的User、ActionItemId会导致拆分错位,用分隔符匹配的方式才能适配所有长度的字段值。如果提取结果带格式方括号,用
SUBSTITUTE或TRIM套一层清理即可。
内容的提问来源于stack exchange,提问作者Robert Kelly
相关产品推荐
相关产品推荐

