如何用DAX正则表达式提取ProductName列指定字符串片段?
用DAX正则表达式实现目标内容提取
可以用DAX的正则表达式函数(需Power BI Desktop 2021年7月及以上版本,或其他支持DAX正则的环境)实现你的需求。
需求修正说明
你描述的第二步“提取倒数第二个-之前的部分”和预期结果不符,结合原数据与目标输出,实际需要的是:
- 先移除最后一个
-及之后的所有内容(比如去掉区域信息) - 再提取处理后字符串中最后一个
-之后的内容(对应原字符串倒数第二个-之后的规格信息)
分步实现方案
步骤1:清理最后一个-之后的内容
新建计算列,移除区域部分:
CleanedProduct = REGEX.REPLACE('你的表名'[ProductName], "\s*-\s*.+$", "")
- 正则解释:
\s*-\s*.+$匹配最后一个-(前后可能带空格)到字符串结尾的所有内容,替换为空。
步骤2:提取目标规格信息
基于清理后的列,提取最后一段规格:
ExtractedProduct = REGEX.EXTRACT('你的表名'[CleanedProduct], ".*-\s*(.+)$")
- 正则解释:
.*-\s*(.+)$匹配到最后一个-(前后可能带空格),捕获后面的所有内容作为结果。
一步到位的合并表达式
无需中间列,直接用一个表达式完成:
ExtractedProduct = VAR CleanedStr = REGEX.REPLACE('你的表名'[ProductName], "\s*-\s*.+$", "") RETURN REGEX.EXTRACT(CleanedStr, ".*-\s*(.+)$")
结果验证
将表达式应用到你的原数据,会得到预期输出:
| 原ProductName | 提取结果 |
|---|---|
| SQL Database Single Standard - S0 - DE West Central | S0 |
| SQL Database Single Standard - 10 DTU - DE West Central | 10 DTU |
注:你提供的预期结果中第二条为
10,若需仅提取数字,可将第二步正则改为.*-\s*(\d+).+$,提取结果即为10。
| SQL Database Single Standard - S0 | S0 |
| SQL Database Single Premium - P4 - DE West Central | P4 |
| SQL Database Single General Purpose - Compute Gen5 - 1 vCore - US East | 1 vCore |
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

