我试图根据重复字符集的位置将字符串分解为子字符串。
源字符串[UPDATES]
如下所示,重复部分之间的字符数差异很大。
"04/24/15 15:12:54 (PZPJ3F): Task update. 04/24/15 15:12:54 (PZPJ3F): Task update. 04/22/15 15:17:13 (SZGQ3T): updated due date prior to global problem 04/22/15 12:28:09 (PZPJ3F): Task updates."
我试图将它们分成单独的子串,以便我可以将它们并排显示为单独的列,如下所示
Column1 = |04/24/15 15:12:54 (PZPJ3F): Task update.
Column2 = |04/24/15 15:12:54 (PZPJ3F): Task update.
Column3 = |04/22/15 15:17:13 (SZGQ3T): updated due date prior to global problem|
我得到第一部分与
一起工作LEFT([UPDATES],FIND([UPDATES],"): ",28)-27)
但是我尝试使用FIND找到下一次出现的"):"并且使用它来开始MID不起作用,特别是在我尝试使用FIND函数结束它们的时候。
IF [Mark1]>0 THEN MID([UPDATES],[Mark1]-25,[Mark2])
ELSE ""
END
Mark1
的地方FLOAT(FIND([UPDATES],"): ",(FIND([UPDATES],"): ")+1)))
和Mark2是
FLOAT(FIND([UPDATES],") ",[Mark1]+1))
我在尝试结束时真的走了兔子洞。
我正在使用Tableau 8.2,因此Tableau 9的功能不是一个选项(期待FIND Nth!
提前致谢。
答案 0 :(得分:2)
关键是find()将第二个可选参数作为起始位置。
因此,在Tableau 8.2中,我会编写一个简单的calc来查找第一个分隔符的位置。然后在最终计算字段中引用该计算字段两次,以产生第一个子字符串的长度和第二个子字符串的起始点。
在Tableau 9之前分离子串是很痛苦的。在列表中提取第一个也不错,第二个是笨拙的,之后就变得很难看了。
最佳方法是升级到版本9或进行一些预处理以拉出子串。