无法在Tableau计算字段中正确使用REGEXP添加千位分隔符
为啥千位分隔符没生效?
1. 分组引用符号用错了
Tableau的REGEXP_REPLACE函数中,替换字符串里引用捕获组必须用$1,而不是你代码里的\1。\1在部分正则引擎中生效,但Tableau遵循的规则是用美元符号加数字来标记捕获组引用。
2. 正则未兼容小数场景
你原正则(\d)(?=(\d{3})+$)里的$是匹配字符串结尾的。如果数字带小数(比如你例子里的9332.191347...),小数点后的数字会破坏“结尾前是3的倍数个数字”的匹配条件,导致正则找不到该添加分隔符的位置。
修正后的代码
调整正则表达式以兼容整数和小数,同时替换分组引用符号:
CASE [CIO Capacity Metrics Parameter] WHEN '%' THEN CASE [Incl. / Excl. OOO Parameter] WHEN 0 THEN STR(ROUND(100*(SUM([HRS_HOURS])/TOTAL(SUM([HRS_HOURS]))),0)) + '%' ELSE STR(ROUND(100*(SUM([Hours Total (Excl. OOO)])/TOTAL(SUM([Hours Total (Excl. OOO)]))),0)) + '%' END WHEN 'FTE' THEN CASE [Incl. / Excl. OOO Parameter] WHEN 0 THEN REGEXP_REPLACE(STR(ROUND(SUM([HRS_MONTH_FTE]),0)), "(\d)(?=(\d{3})+(?:\.|$))", "$1,") ELSE REGEXP_REPLACE(STR(ROUND(SUM([FTE Total (Excl. OOO)]),0)), "(\d)(?=(\d{3})+(?:\.|$))", "$1,") END WHEN 'Hours' THEN CASE [Incl. / Excl. OOO Parameter] WHEN 0 THEN REGEXP_REPLACE(STR(ROUND(SUM([HRS_HOURS]),0)), "(\d)(?=(\d{3})+(?:\.|$))", "$1,") ELSE REGEXP_REPLACE(STR(ROUND(SUM([Hours Total (Excl. OOO)]),0)), "(\d)(?=(\d{3})+(?:\.|$))", "$1,") END END
正则说明
新正则(\d)(?=(\d{3})+(?:\.|$))的逻辑:
- 匹配单个数字,要求该数字后跟着连续3的倍数个数字,且后续内容要么是小数点,要么是字符串结尾。
- 不管目标数字是否带小数,都能精准定位千位分隔符的添加位置。
内容的提问来源于stack exchange,提问作者NidenK
相关产品推荐
相关产品推荐

