2012-03-27 4 views
2

Может кто-нибудь, пожалуйста, скажите мне, что мне не хватает в этой формуле в SSRS? Или еще лучше, может кто-нибудь, пожалуйста, написать эту же вещь в синтаксисе NESTED IIF?Правильный синтаксис вложенного IIF или SWITCH корректно

Switch(
    (Parameters!StartMonth.Value <= 1 And Parameters!EndMonth.Value >= 1), 
    (Code.CalculateFraction(
          (Fields!retail1.Value -Fields!cost1.Value) , Fields!cost1.Value 
          ) *100 
    ), 
    (Parameters!StartMonth.Value <= 2 And Parameters!EndMonth.Value >= 2), 
    (Code.CalculateFraction(
           (
           (Fields!retail1.Value +Fields!retail2.Value)- 
           (Fields!cost1.Value + Fields!cost2.Value) 
           ) , 
          (Fields!cost1.Value + Fields!cost2.Value) 
          ) *100 
    ) 
    ) 

Это серьезно заставляет меня сходить с ума. Для простоты я просто поставил здесь 2 итерации. У меня 12 из них, и каждый следующий шаг я должен подвести итоги розничной торговли1 до retail12 и стоить1 до стоимости12.

Я не могу получить это право для этих двух в первую очередь.

EDIT:

Я пытаюсь это и до сих пор возвращает значение в первом состоянии

=iif(
     Parameters!StartMonth.Value <= 1 AND Parameters!EndMonth.Value >= 1, 
     ReportItems!txtTotal2.Value, 
     iif(
     Parameters!StartMonth.Value <= 2 AND Parameters!EndMonth.Value >= 2, 
     ReportItems!txtTotal3.Value, 
      iif(
      Parameters!StartMonth.Value <= 3 AND Parameters!EndMonth.Value >= 3, 
      ReportItems!txtTotal4.Value, 
      Nothing 
       ) 
      ) 
    ) 

EDIT 2:

выяснял ЧТО БЫЛО НЕПРАВИЛЬНО.

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

Но мне пришлось изменить логику, чтобы получить результат, который я хотел.

iif(
     Parameters!EndMonth.Value = 1, 
     ReportItems!txtTotal1.Value, 
        Parameters!EndMonth.Value = 2, 
       ReportItems!txtTotal2.Value, 
      and so on 
      ) 

Это решило мою проблему. Спасибо, ребята, я это ценю.

+0

Вы получаете сообщение об ошибке, или просто неправильные результаты? –

ответ

1

Попробуйте использовать разнесенные IIF заявления:

=iif(
    Parameters!StartMonth.Value <= 1 AND Parameters!EndMonth.Value >= 1, 
    ReportItems!txtTotal2.Value, Nothing 
    ) OR 

iif(
    Parameters!StartMonth.Value <= 2 AND Parameters!EndMonth.Value >= 2, 
    ReportItems!txtTotal3.Value, Nothing 
    ) OR 

iif(
    Parameters!StartMonth.Value <= 3 AND Parameters!EndMonth.Value >= 3, 
    ReportItems!txtTotal4.Value, Nothing 
    ) 
1

Синтаксис выглядит правильно на первый взгляд. В большинстве мест в SSRS для начала вашего заявления требуется =. Ваш код выше относится к встроенному коду для CalculateFraction() Это существует и успешно используется в другом месте?

+0

Я использую знак = и метод CalculateFraction используется в большинстве мест моего отчета и работает нормально. Я не получаю никаких ошибок. Вот что меня смущает. – aMazing

+0

Почему, по вашему мнению, ваш оператор Switch не работает? Приведите несколько примеров ввода и желаемого вывода. –

Смежные вопросы