在 SSRS 2008 中嵌套 IIF
Nesting IIF in SSRS 2008
我正在编写一个表达式,它需要计算当前报告运行日期和字段中的日期值(名为 cmp_lastap)之间的天数,然后 return 的值为:
- "delinquent" 如果经过的天数是
>= 60
,
- "past due" 如果
>= 45
和 <60
,
- "due" 如果
>30
和 <45
和
- "current" 如果
<= 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")
对于其他表达方式的任何帮助或建议,我们将不胜感激!
您不必测试少于。正在使用短路 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
注意我没有测试或检查你的日期逻辑,但假设这是合理的,那么上面的方法就可以了。
我正在编写一个表达式,它需要计算当前报告运行日期和字段中的日期值(名为 cmp_lastap)之间的天数,然后 return 的值为:
- "delinquent" 如果经过的天数是
>= 60
, - "past due" 如果
>= 45
和<60
, - "due" 如果
>30
和<45
和 - "current" 如果
<= 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")
对于其他表达方式的任何帮助或建议,我们将不胜感激!
您不必测试少于。正在使用短路 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
注意我没有测试或检查你的日期逻辑,但假设这是合理的,那么上面的方法就可以了。