我正在编写一个表达式,需要计算当前报表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")
非常感谢任何有关其他表达方式的帮助或建议!
答案 0 :(得分:1)
你不必测试少于。正在使用短路布尔评估。
=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
语句。
答案 1 :(得分:1)
你不能使用AND那样,你不得不说[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
注意我没有测试或检查过你的日期逻辑,但假设这是合理的,那么以上内容就可以了。