Select 或根据 Spotfire 中的格式对值进行分组

Select or group values based on their formatting in Spotfire

一个特定字段的格式应该是“000000”(一个 6 位数字字段,只包含数字并且包括前导零)但是一些记录以不寻常的格式出现(例如 10A3C1、17、城市、约翰·史密斯)。有没有办法将所有不符合指定格式的记录组合在一起?

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

CASE WHEN Len([Your Column])=6 THEN Integer([Your Column]) ELSE null END

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

我没有足够的代表点数来评论 AmbivalentGeek 的回答,但如果您在检查长度后将列转换为 Integer,或者以其他方式处理字母数字 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

Spotfire 在验证数据方面并不是很好。最好在 Spotfire 之外执行此操作。

就是说,我想我们可以一起破解一些东西。如果您使用以下表达式创建计算列,您将能够识别匹配项:

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

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

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