Tableau中删除第二个“.”字符后全部文本的实现方法
原计算逻辑异常原因排查
你写的计算字段全量返回Null、结果不符合预期,核心是四个逻辑偏差叠加导致的:
- 截取起点设置错误:原代码将MID的起始位置设为
FIND([Dimension],'.') + 1,也就是从第一个点的下一位开始截取,完全丢失了第一段文本的内容,和“保留到第二个点位置的前两段内容”的目标从起点就错位了。 - 查找第二个点的逻辑错误:原代码硬编码搜索起点为2,没有关联第一个点的实际位置,导致找出来的还是第一个点的位置,无法正确定位第二个点的位置。
- 缺少边界异常兜底:当文本仅包含1个点、甚至完全没有点的时候,
FIND([Dimension],'.',2)会返回0值,此时计算出的截取长度会是负数,Tableau遇到负数截取长度会直接返回Null,不会自动适配这类场景。 - 截取范围错位:原代码计算的截取长度是两个点之间的字符数,仅能返回两个点中间的片段,根本不是完整的两段点分隔内容。
可正常运行的实现方案
核心目标:保留文本中第二个.及其之前的所有内容,移除第二个点之后的全部字符,同时覆盖所有边界场景避免返回Null
具体计算字段逻辑如下,直接复制替换原有内容即可:
// 空值兜底,避免计算报错 IF [Dimension] IS NULL THEN [Dimension] ELSEIF FIND([Dimension], '.') = 0 THEN // 无任何点的情况,直接返回原文本 [Dimension] ELSEIF FIND([Dimension], '.', FIND([Dimension], '.') + 1) = 0 THEN // 仅存在1个点的情况,直接返回原文本 [Dimension] ELSE // 从文本开头截取到第二个点的前一位,保留前两段点分隔内容 LEFT([Dimension], FIND([Dimension], '.', FIND([Dimension], '.') + 1) - 1) END
实际效果验证
- 输入
xx.xxx.xxx.xxx:输出xx.xxx,符合截取要求 - 输入
xxx.xxx.xx.xx:输出xxx.xxx,符合截取要求 - 输入
test.sample:仅包含1个点,直接返回原文本,不会出现Null - 输入
testsamples:无任何点,直接返回原文本
内容的提问来源于stack exchange,提问作者alphasqrd
相关产品推荐
相关产品推荐

