2017-01-25 7 views
0

У меня проблема с этим фрагментом кода внутри параметра в SSRS2012.Конструкция IIF не разрешает правильный путь (SSRS)

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

Моя цель состоит в том, чтобы проверить, если P1 параметр содержит «@», если это не я напечатает «отсутствует @» в противном случае я хочу, чтобы удалить из этого параметра, что после знака «@» ("@ «внедрено».

пример:
P1 = 123456 -> печать "отсутствует @"
P1 = 123 @ 56 -> печать 123

Проблема заключается в том, что SSRS падает ошибку: «Аргумент 'длина' должна быть больше или равно нулю ", когда я вставляю значение без" @ ". (когда я вставляю значение с «@», все идет хорошо)

Похоже, что IIF разрешает сначала два выражения (а не одно - это истина или ложь), и после этого он дает вам правильный, основанный на оценка первого условия.

Ищет помощь. Благодаря!

+0

Возможный дубликат [вычислят ли функция IIF оба путей в SSRS или это короткое замыкание?] (Http://stackoverflow.com/ вопросы/1204179/do-the-iif-function-compute-both-paths-in-ssrs-or-is-it-short-circuited) – SearchAndResQ

+0

не дубликат, попробовал функцию переключателя, и это то же самое –

+0

Не может быть, что параметр содержит только символ «@» и ничего больше? –

ответ

1

это странно ошибка, вот одно решение

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

, это действительно работает, спасибо mate –