IIF 构造没有解析正确的方法 (SSRS)

IIF construct not resolving the correct way (SSRS)

我在 SSRS2012 的参数中遇到了这段代码的问题。

=IIF(InStr(Parameters!P1.Value,"@")=0,
"missing @", 
Left(Parameters!P1.Value(InStr(Parameters!P1.Value,"@")-1)))

我的目标是检查参数 P1 是否包含“@”,如果不包含,我将打印 "missing @" 否则我想从该参数中删除“@”之后的内容(“@”包含)。

示例:
P1 = 123456 --> 打印 "missing @"
P1 = 123@56 --> 打印 123

问题是当我插入一个没有“@”的值时,SSRS 会丢弃错误:"Argument 'length' must be greater or equal to zero"。 (当我插入一个带有“@”的值时一切顺利)

IIF 似乎首先解析了 2 个表达式(而不是一个为真或为假),然后根据对第一个条件的评估给出正确的表达式。

寻求帮助。谢谢!

这是一个奇怪的错误,这是一个解决方案

=replace(replace(IIF(InStr(Fields!P1.Value,"@")<> 0,
left(Fields!P1.Value,InStr(Fields!P1.Value,"@")),"missing"),"@",""),"missing","missing @")