Выражение служб Reporting services с использованием переключателя

#sql-server #reporting-services

#sql-сервер #службы отчетов

Вопрос:

Я не смог заставить это выражение работать со службами reporting services. Я должен использовать оператор 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
  

Комментарии:

1. Какую ошибку вы получаете с помощью инструкции switch?

Ответ №1:

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

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

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

Комментарии:

1. Он не выдает никакой ошибки. Я все еще вижу, что имя поля отображается, даже если set_flag = 1.

2. Синтаксис правильный, поскольку я только что попробовал его сам. Является ли ваше значение set_flag определенно целым числом?

3. Это битовый тип данных в базе данных.

4. Если я использую set_flag. Значение = «1», оно работает. Спасибо за помощь.

Ответ №2:

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

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

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

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