在SSRS 2008中嵌套IIF

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SSRS 2008中嵌套IIF相关的知识,希望对你有一定的参考价值。

我正在编写一个表达式,需要计算当前报表rundate和字段中日期值之间的天数(名为cmp_lastap),然后返回值:

  • 如果经过的天数是>= 60,则“拖欠”,
  • 如果>= 45<60,“过期”,
  • “如果”>30<45
  • “当前”,如果<= 30

似乎嵌套的IIF语句是我需要使用的,但有些东西已经关闭,我无法弄清楚我做错了什么:

=IIF(DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) >= 60,"DELINQUENT", IIF(DateDiff(DateInterval.Day, Fields!cmp_lastap.Value,Today) > 45 AND <60, "PAST DUE", IIF(DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) > 30 AND <=45, "DUE", IIF(DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) <= 30, "CURRENT")

任何帮助或建议其他表达式来实现这一点将不胜感激!

答案

你不能使用和那样,你不得不说[date comparison logic] > X AND [date comparison logic] < Y等...

但是......我发现嵌套的IIF很快就会变得凌乱,特别是如果你有多个条件需要测试,所以我更喜欢使用SWITCH

使用开关你可以像这样写。

=SWITCH (
    DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) >= 60,"DELINQUENT",
    DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) > 45,"PAST DUE",
    DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) > 30,"DUE",
    True, "CURRENT"
)

另一个不错的副作用是SWITCH在第一个计算结果为True的表达式停止,因此我们不需要测试范围。最终的True就像一个ELSE

注意我没有测试或检查你的日期逻辑,但假设这是合理的,那么上面的工作就可以了。

另一答案

你不必测试少于。正在使用短路布尔评估。

=IIF(DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) >= 60, "DELINQUENT",
    IIF(DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) > 45, "PAST DUE",
        IIF(DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) > 30, "DUE",
            "CURENT")
    )
)   

您还可以使用可能更具可读性的CASE语句。

以上是关于在SSRS 2008中嵌套IIF的主要内容,如果未能解决你的问题,请参考以下文章

SSRS表达式帮助多个条件

SSRS - 如何使用3个if语句,其中一个是空值

使用DateDiff后格式化SSRS中的时间字段

SSRS导出冻结条件格式

SSRS 2008 R2-格式参数为DD / MM / YYYY

SSRS如果参数与列值不匹配,如何隐藏Tablix?