Reporting services 在SSRS 2008中嵌套IIF

Reporting services 在SSRS 2008中嵌套IIF,reporting-services,ssrs-2008-r2,Reporting Services,Ssrs 2008 R2,我正在编写一个表达式,它需要计算当前报表运行日期和字段中的日期值(名为cmp_lastap)之间的天数,然后返回一个值: “拖欠”如果经过的天数=60 “过期”如果=45和30和45和30以及您不必测试少于。正在使用短路bool评估 =IIF(DateDiff(DateInterval.Day, Fields!cmp_lastap.Value, Today) >= 60, "DELINQUENT", IIF(DateDiff(DateInterval.Day, Fields!cm

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

  • “拖欠”如果经过的天数
    =60

  • “过期”如果
    =45
    30
    45和30以及您不必测试少于。正在使用短路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
    语句,该语句可能更具可读性。

    您不必测试少于个字符。正在使用短路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
    语句,这可能会证明更具可读性。

    您不能使用这样的语句,您必须说
    [date comparison logic]>X和[date comparison logic]
    等等

    但是。。。 我发现嵌套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


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

    你不能使用,你必须说
    [date comparison logic]>X和[date comparison logic]
    等等

    但是。。。 我发现嵌套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

    注意我没有测试或检查您的日期逻辑,但假设这是合理的,则上述操作将起作用