Синтаксис вложенного оператора IIF или SWITCH необходим правильно - PullRequest
2 голосов
/ 28 марта 2012

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

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, и на каждом следующем шаге я должен подвести итоги retail1 до retail12 и cost1 до cost12.

Во-первых, я не могу понять это правильно.

РЕДАКТИРОВАТЬ:

Я пытаюсь сделать это сейчас и по-прежнему возвращает значение в первом условии

=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
               )
           )
    )

РЕДАКТИРОВАТЬ 2:

выяснил, что было неверно.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Попробуйте использовать отдельные выражения 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 голос
/ 29 марта 2012

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

...