在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的主要内容,如果未能解决你的问题,请参考以下文章