Выражение служб отчетов с использованием Switch - PullRequest
5 голосов
/ 03 ноября 2011

Я не мог заставить это выражение работать со службами отчетов. Я должен использовать IF и ELSE IF. Спасибо за любые предложения.

= Switch( IsNothing(Fields!field_date.Value),"", Fields!set_flag.Value=1,"Declined", Fields!field_name.Value) 

Вот что я пытаюсь сделать.

If(IsNothing(Fields!field_date.Value)) Then "";

ElseIf Fields!set_flag.Value=1 Then "Declined";

Else Fields!field_name.Value

Ответы [ 2 ]

7 голосов
/ 03 ноября 2011

Разве SSRS не использует VB Runtime Library?В этом случае оператор switch является задокументированным здесь и утверждает, что вы должны передать четное количество элементов. Если это ваша проблема, вы, вероятно, получаете ArgumentException thrown.

Если вы хотите получить возвращаемое значение по умолчанию, вам нужно будет добавить фиктивное условие, которое всегда будет иметь значение true:

= Switch( IsNothing(Fields!field_date.Value),"", Fields!set_flag.Value=1,"Declined", True, Fields!field_name.Value) 
0 голосов
/ 03 ноября 2011

Я бы использовал кодовый блок, как предложил gbn. Это будет легче читать. Вот как Microsoft может использовать блоки кода в службах Reporting Services: http://msdn.microsoft.com/en-us/library/ms156028%28v=sql.100%29.aspx

Если вы не хотите использовать блок кода, вы можете связать операторы IIF в своем выражении. Глядя на ваш пример, это будет что-то вроде

=IIF(IsNothing(Fields!field_date.Value),"",IIF(Fields!set_flag.Value=1,"Declined",Fields!field_name.Value)

Если более чем 2 IIF или что-либо более сложное, чем просто вернуть значение, тогда я бы определенно пошел на блок кода. В противном случае вы только усугубляете ситуацию для человека, который должен вести отчет после вас.

...