MSDN заявляет, что SSRS будет оценивать как истинную, так и ложную часть оператора Iif
независимо от того, какой из них будет возвращен. Кажется, это делает Iif
совершенно бесполезным с точки зрения предотвращения ошибок. Другими словами, вы не можете использовать Iif
для обхода ошибки, поэтому, по сути, любая операция, которую вы решите включить, всегда должна быть допустимой, независимо от условий. Честно говоря, что хорошего в этом?
Итак, мой вопрос: есть ли у SSRS другие способы оценки условий, кроме Iif
?
Вот мой пример. Я просто хочу иметь возможность вернуть Left, не захватывая первый символ совпадения.
=Iif
(
InStr(Fields!SearchField.Value, Fields!Criteria.Value) <= 1,
"",
Left(Fields!SearchField.Value, InStr(Fields!SearchField.Value, Fields!Criteria.Value)-1)
)
Однако здесь происходит то, что InStr(Fields!Criteria.Value, Fields!Criteria.Value)-1
в некоторых случаях оценивается как 0, что совершенно нормально, пока FALSE часть оператора не попытается вычесть из него 1 и передать его в функцию InStr
. InStr
не может принимать -1 в качестве количества возвращаемых символов.
В упрощенном виде это выглядит следующим образом. Предположим, у вас есть ситуация, когда Value никогда не может упасть ниже 0 без возникновения ошибки.
Iif (Value > 0, Value = Value -1, 0)
Попытка использовать Iif
, чтобы значение не опускалось ниже 0, не работает, потому что все эти операторы оцениваются, даже если они не соответствуют условиям.
Из-за этого попытка использовать InStr
для получения индекса совпадения и Left для построения подстроки на основе этого индекса не удалась. Я понятия не имею, как полностью избежать этого состояния.