2016-11-22 92 views
0

我有一个文档属性被用作报告的过滤器。这是一个多选列表框。我创建了一个计算字段(标志),使用这个表达式:Spotfire 6.5:如何检查查找函数中的确切值

if(find(Upper(Concatenate([Col1],' | ',[Col2])),Upper('$map("sum([${Property}])", ",")'))>0,"Yes", "No") 

的这里的事情是,当我选择从列表框中属性即一个值。 “TV | HDTV”,则来自数据表的所有这些值开始正在返回,即返回位置,即, “TV | HD”,“TV | HDTV”这两个值都出现在图上。值被合并在我不想要的行中。有什么办法可以做一个完全匹配或可以调整这个公式。

我不能将此标志更改为任何其他数据类型,因为大约30次计算都基于此字段。

问候,

Subro

回答

2

想象一下,我自己。我明白,地图功能就像一个模板。所以我想为什么不修改模板。这里是我使用的代码:

If(Upper(Concatenate([Col1],' | ',[Col2])) in ($map("'${Property}'", ",")),"Yes","No") 

这适用于我的价值观。我检查了很多场景。此外,对于该属性,我使用了一个字段来填充它,因为我已经应用了Upper,所以基本上它已经包含已经以Upper形式出现的值。 @niko:谢谢你的帮助。我相信它也能起作用。为我浪费的时间道歉。

问候,

Subro

1

你可以尝试一个正则表达式替换比较:

If(RXReplace(Concatenate([Col1], ' | ', [Col2]), Concatenate('^', '$map("sum([${Property}])", ",")', '$'), "", "i") = "", "Yes", "No") 

如果针和干草堆的字符串相匹配,RXReplace()(我加了"i"脱敏情况下)将返回一个空的字符串。

可能必须选择一个不同的连接字符,或者你可能不得不连接"\\|"如果这是不可能的。

+1

谢谢@niko。我已经知道了。我用了一些更简单的东西。 – Subro

+0

没问题!如果您分享您的解决方案作为答案,那将是非常好的。我没有看到'$ map()'的很多例子,所以看看你想出了什么:) – niko

+1

已经完成了兄弟! :) – Subro