在 SSRS 2008 中嵌套 IIF

Nesting IIF in SSRS 2008

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

看来嵌套的 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")

对于其他表达方式的任何帮助或建议,我们将不胜感激!

您不必测试少于。正在使用短路 bool 评估。

=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 语句,这样可读性更好。

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

不过... 我发现嵌套的 IIF 很快就会变得混乱,尤其是当你有多个条件要测试时,所以我更喜欢使用 SWITCH

用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

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