2017-12-19 9 views
0

ich einen Ausdruck hier schreibe, die die Anzahl der Tage zwischen dem aktuellen Bericht rundate und dem Datum Wert im Feld (mit dem Namen cmp_lastap) berechnen muss, geben Sie dann einen Wert von:Nesting IIF in SSRS 2008

  • " delinquent“, wenn die Anzahl der verstrichenen Tage ist >= 60,
  • "überfällig", wenn >= 45 und <60,
  • "due" wenn >30 und <45 und
  • "Strom", wenn <= 30.

Es scheint, dass eine verschachtelte Anweisung von IIF ist, was ich verwenden müssen, aber etwas ist weg und ich kann nicht herausfinden, was ich falsch gemacht habe:

=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")

Jede Hilfe oder Vorschläge für andere Ausdrücke, um dies zu erreichen, würden sehr geschätzt werden!

Antwort

1

kann nicht verwendet werden und so, würden Sie [date comparison logic] > X AND [date comparison logic] < Y etc zu sagen haben ...

jedoch ... Ich finde die verschachtelte IIF chaotisch schnell vor allem, wenn Sie mehr als eine Bedingung müssen Test also bevorzuge ich SWITCH

Mit Schalter könnten Sie es so schreiben.

=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" 
) 

Ein weiterer schöner Nebeneffekt ist, dass SWITCH stoppt beim ersten Ausdruck, der so zu True werten wir nicht Bereiche testen müssen. Die endgültigen True wirkt wie ein ELSE

Hinweis ich nicht getestet haben oder Sie überprüft Logik stammen aber, dass unter der Annahme, Ton dann über das funktionieren wird.

+0

Arbeitete perfekt, vielen Dank! – Justin

1

Sie müssen nicht für weniger als testen. Es wird eine Kurzschluss-Bool-Auswertung verwendet.

=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") 
    ) 
) 

können Sie auch eine CASE Anweisung verwenden, die besser lesbar erweisen kann.