多个嵌套的IIF

时间:2014-02-28 15:11:24

标签: nested switch-statement iif

我认为我需要在SSRS中使用嵌套的IIF作为我的目标,如下面的伪代码所示:

If GoalType.Value = ImplementED And
SavingsGoal.Value <= ImplementEDSavings.Value OR 
If GoalType.Value = ImplementABLE And
SavingsGoal.Value <= ImplementABLESavings.Value 
Then display zero dollars

ELSE

If GoalType = ImplementED And 
SavingsGoal.Value > ImplementEDSavings.value Then
Display SavingsGoal.Value minus ImplementABLESavings

ELSE

If GoalType = ImplementABLE And
SavingsGoal.Value > ImplementABLESavings.Value Then
Display SavingsGoal.Value minus ImplementABLESavings

我已经有了这么多工作:

=IIF(First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND 
Sum(Fields!SavingsGoal.Value, "Project_Details") <= Sum(Fields!ImplementedSavings.Value, "dsInitiatives") OR 
(First(Fields!GoalType.Value, "Project_Details") = "Implementable" AND 
Sum(Fields!SavingsGoal.Value, "Project_Details") <= Sum(Fields!ImplementableSavings.Value, "dsInitiatives")),0,
Sum(Fields!SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementedSavings.Value, "dsInitiatives"))

所有我需要弄清楚如何在那里获得最终的“ELSE”,意识到我需要更多的IIF或Switch或者其他东西......我已经尝试了几种方式,我的截止日期正式紧张。感谢任何能提供帮助的人。请注意,我是SSRS报告的新手。

更新: 以下是我尝试过的几种方法。我每次尝试都会遇到这个错误: 错误BC30057'公共函数IIf(表达式为布尔值,TruePart为对象,FalsePart为对象)为对象'SSRS

的参数太多

= IIF(     (First(Fields!GoalType.Value,“Project_Details”)=“已实现”AND     Sum(Fields!SavingsGoal.Value,“Project_Details”)&lt; = Sum(Fields!ImplementedSavings.Value,“dsInitiatives”)),0     )或

IIF(     (First(Fields!GoalType.Value,“Project_Details”)=“可执行”AND     Sum(Fields!SavingsGoal.Value,“Project_Details”)&lt; = Sum(Fields!ImplementableSavings.Value,“dsInitiatives”)),0,     )或

IIF(     (First(Fields!GoalType.Value,“Project_Details”)=“已实现”AND     Sum(Fields!SavingsGoal.Value,“Project_Details”)&gt; Sum(Fields!ImplementedSavings.Value,“dsInitiatives”)),     Sum(Fields!SavingsGoal.Value,“Project_Details”) - Sum(Fields!ImplementedSavings.Value,“dsInitiatives”),     )或

IIF(     (First(Fields!GoalType.Value,“Project_Details”)=“可执行AND     Sum(Fields!SavingsGoal.Value,“Project_Details”)&gt; Sum(Fields!ImplementableSavings.Value,“dsInitiatives”)),     Sum(Fields!SavingsGoal.Value,“Project_Details”) - Sum(Fields!ImplementableSavings.Value,“dsInitiatives”)     )

OR

= IIF(First(Fields!GoalType.Value,“Project_Details”)=“已实现”AND  Sum(Fields!SavingsGoal.Value,“Project_Details”)&lt; = Sum(Fields!ImplementedSavings.Value,“dsInitiatives”)或  (First(Fields!GoalType.Value,“Project_Details”)=“可执行”AND  Sum(Fields!SavingsGoal.Value,“Project_Details”)&lt; = Sum(Fields!ImplementableSavings.Value,“dsInitiatives”)),0,

Switch(First(Fields!GoalType.Value,“Project_Details”)=“已实施”,  Sum(Fields!SavingsGoal.Value,“Project_Details”) - Sum(Fields!ImplementedSavings.Value,“dsInitiatives”) Switch(First(Fields!GoalType.Value,“Project_Details”)=“可执行”,  Sum(Fields!SavingsGoal.Value,“Project_Details”) - Sum(Fields!ImplementableSavings.Value,“dsInitiatives”))))

个人评论,如果这些系统不会假设每个人都是天生的程序员并且给出了会说英语的错误,那么我就不必来这些网站进行翻译。好的,肥皂盒结束了。再次感谢任何可以提供帮助的人

1 个答案:

答案 0 :(得分:1)

这是对您第一次更新的一点修改。

=iif( (First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND Sum(Fields!SavingsGoal.Value, "Project_Details") <= Sum(Fields!ImplementedSavings.Value, "dsInitiatives")),0,
iif( (First(Fields!GoalType.Value, "Project_Details") = "Implementable" AND Sum(Fields!SavingsGoal.Value, "Project_Details") <= Sum(Fields!ImplementableSavings.Value, "dsInitiatives")),0,  
iif( (First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND Sum(Fields!SavingsGoal.Value, "Project_Details") > Sum(Fields!ImplementedSavings.Value, "dsInitiatives")), Sum(Fields!SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementedSavings.Value, "dsInitiatives"), 
iif( (First(Fields!GoalType.Value, "Project_Details") = "Implementable" AND Sum(Fields!SavingsGoal.Value, "Project_Details") > Sum(Fields!ImplementableSavings.Value, "dsInitiatives")), Sum(Fields!SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementableSavings.Value, "dsInitiatives") ) 
)))

我没有使用OR,而是在前面的iif的false参数中嵌套了后续的iif语句。关于你得到的那个错误,“太多的争论” - 你实际上太少了。

这是代码的第一个(简化)块:

=iif( First(GoalType) = "Implemented" AND Sum(SavingsGoal) <= Sum(ImplementedSavings),0 ) OR

请注意,您的布尔值是正确的,但是您只提供一个参数,然后为“0”提供true。 iif需要两个参数,一个是真是假。在您的实例中,您希望下一个iif语句位于false(else)部分。

更新的代码:

=iif( First(GoalType) = "Implemented" AND Sum(SavingsGoal) <= Sum(ImplementedSavings),0, iif(boolean, true, iif(boolean, true, false)))