根据Spotfire中的格式选择或分组值

时间:2016-05-20 16:20:21

标签: group-by tibco spotfire

特定字段的格式应为" 000000" (一个6位数的字段只包含数字&包括前导零)但是有几个记录以不寻常的格式出现(例如10A3C1,17,City,John Smith)。有没有办法将所有不符合指定格式的记录组合在一起?

3 个答案:

答案 0 :(得分:1)

Spotfire在验证数据方面并不是很出色。在Spotfire之外做这件事最好。

说,我认为我们可以一起破解。如果您使用以下表达式创建计算列,则您将能够识别匹配项:

if(RXReplace([column], "\\D", "X", "g") = [column] and Len([column]) = 6, "MATCH")

此正则表达式将所有非数字字符替换为字符X。如果我们将其与原始值进行比较,另外检查其长度,我们可以验证该值是否符合您的要求。

我确实想再次强调这是hacky,你可能不应该在Spotfire中做这个™:)

答案 1 :(得分:0)

插入计算列以验证长度并将值转换为整数。

UIImage

任何空出来的东西都不符合您的规格。

答案 2 :(得分:0)

我没有足够的回复点来评论AmbivalentGeek的答案,但如果你在检查长度后将列转换为整数,或者处理字母数字6长度的情况,他应该为你工作其他方式。

case  when len([yourColumn])=6 then Integer([yourColumn]) else null end

如果你有一个长度为6的字母数字值,如123A56,这将删除你会得到的误报。这将删除前导零,因此您必须创建一个额外的计算列,重新格式化为6位数。

这是一个漫长的道路,因为我现在无法想到更优雅的解决方案。 test2是上面的计算列:

case  
when Len(String([test2]))=1 then Concatenate("00000",String([test2])) 
when Len(String([test2]))=2 then Concatenate("0000",String([test2])) 
when Len(String([test2]))=3 then Concatenate("000",String([test2])) 
when Len(String([test2]))=4 then Concatenate("00",String([test2])) 
when Len(String([test2]))=5 then Concatenate("0",String([test2])) 
when Len(String([test2]))=6 then String([test2])
else "000000"
end