多重嵌套的IIF语句返回SSRS错误

时间:2019-04-16 00:36:50

标签: reporting-services

我正在使用SSRS 2014,并且多个嵌套的IIF语句出现错误。我的处理方式可能完全不对,但是我认为我可以嵌套条件/ DWT / DWF三元组来代替DWT或DWF在另一种情况下。这对我来说不行。

基本上,我正在尝试根据满足某些条件的方式对报告行进行颜色编码。简而言之,根据未开展项目的天数,将某些地区区分开来。

我把这个表情扭曲得像红宝石的立方体。我确定我只是想遗漏一些明显的东西,但是在这一点上,我已经不停地开着它玩了好几个小时,更改了语法元素,事物的顺序等,从SSRS得到的一切只是关于右括号缺失的无益投诉。

这是最新的迭代:

=iif(Fields!District.Value="999","LightGreen",
 iif(Max(Fields!DaysUnworked.Value) >60,"LightCoral",
 iif(Max(Fields! DaysUnworked.Value) >=45,"Khaki",
 iif(Fields!District.Value="50"
     OR Fields! District.Value="35"
     OR Fields! District.Value= "25"
     OR Fields! District.Value="19"
     OR Fields! District.Value="7","LimeGreen",
 iif(Max(Fields!DaysUnworked.Value) >60,"LightCoral",
 iif(Max(Fields!DaysUnworked.Value) >=30,"Khaki",                                  
 iif(Max(Fields!DaysUnworked.Value<30,"LightGreen","Transparent"))))

此处的想法是,除数字特别提及的地区外,所有地区都将标为“ LimeGreen”。

一个地区(999)会根据未使用的天数来涂上不同的颜色,在这种情况下,“ LightGreen”将在45天以下,“ Khaki”在45天(含)与60天之间60将是“ LightCoral”。

其他专门命名的地区将与上述类似,但将使用<30,> = 30,> 60代替<45,> = 45,> 60。

SSRS不会对我尝试过的任何东西(除了“)”或“,”或两者都进行反驳。

我知道,我知道颜色有点傻...但是我只是按照我的指示去做(或者尝试去做)。

任何帮助将不胜感激。我猜想这将变得非常简单,以后我会觉得很笨。 (不过,这不会是第一次)。预先感谢您,谢谢。

2 个答案:

答案 0 :(得分:1)

使用“切换”功能可能会容易一些:

=switch(Fields!District.Value="999","LightGreen",
        Max(Fields!DaysUnworked.Value) >60,"LightCoral",
        Max(Fields! DaysUnworked.Value) >=45,"Khaki",
        Fields!District.Value="50","LimeGreen",
        Fields! District.Value="35","LimeGreen",
        Fields! District.Value= "25","LimeGreen",
        Fields! District.Value="19","LimeGreen",
        Fields! District.Value="7","LimeGreen",
        Max(Fields!DaysUnworked.Value) >60,"LightCoral",
        Max(Fields!DaysUnworked.Value) >=30,"Khaki",                                  
        Max(Fields!DaysUnworked.Value) <30,"LightGreen")

答案 1 :(得分:0)

我看到了一种更简单的处理方法,因为很多值将是柠檬绿色,就是将所有与不同值不匹配的值都设置为柠檬绿色。此外,似乎确实存在一些语法错误。我主要看到的是某些Field声明中的空格。它应该是Fields!District.Value,没有空格。这就是我简化此表达式的方法。

=IIF(Fields!District.Value="999" OR MAX(Fields!DaysUnworked.Value < 30),"LightGreen",
    IIF(Max(Fields!DaysUnworked.Value)>=30,"Khaki",
        IIF(Max(Fields!DaysUnworked.Value)>60, "LightCoral", "LimeGreen")))

在查看此内容时,我注意到您对DaysUnworked有两个比较-一个对>=30和另一个对>=45。您应该能够使用单个表达式捕获所有这些。您还对DaysUnworked > 60有两个不同的比较。此表达式应涵盖所有内容。