正确需要嵌套的IIF或SWITCH语句语法

时间:2012-03-27 22:22:35

标签: syntax reporting-services nested switch-statement

有人可以告诉我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个,下一步我必须总结零售1到零售12和成本1直到成本12.

我不能在这两个方面做到这一点。

编辑:

我现在正在尝试这个并且仍然在第一个条件中返回值

=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 个答案:

答案 0 :(得分:1)

乍一看语法看起来是正确的。在SSRS的大多数地方,您需要=来开始陈述。您上面的代码是指CalculateFraction()的嵌入代码是否存在且是否在其他地方成功使用?

答案 1 :(得分: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
    )