Pregunta

Tengo un problema con las expresiones en los informes. Estoy coloreando el fondo de un cuadro de texto dentro de una tabla según el valor que contenga. El texto en el campo se refiere a las copias de seguridad para un servidor SQL. El valor es una fecha o el texto "Todavía no tomado". Si la fecha tiene más de 2 días, quiero que el fondo sea amarillo. Si tiene más de una semana de antigüedad o si el valor de la fecha es "Todavía no se ha tomado", quiero que el fondo sea rojo. De lo contrario, será verde.

El problema que he tenido desde que comencé con los informes para SSRS (hace unas semanas) es que mis expresiones parecen ser completamente evaluadas. Una instrucción IF tendrá sus valores verdadero y falso evaluados aunque solo se use uno de ellos.

Esto se convierte en un problema porque "Todavía no se ha tomado" claramente no es una fecha y para trabajar con las fechas necesito convertir la cadena de fecha en una fecha. Aquí está el código que tengo actualmente:

=IIF(Fields!LastBackUpTaken.Value = "Not Yet Taken","Red", IIF( IsDate(Fields!LastBackUpTaken.Value) = true,
  IIF( CDate(Fields!LastBackUpTaken.Value).AddDays(Parameters!DaysTillExpiry.Value).CompareTo(NOW()) = 1,
          "GreenYellow",
      IIF( CDate(Fields!LastBackUpTaken.Value).AddDays(7).CompareTo(NOW()) = 1, "Yellow", "Red")),
  "Red"))

Entonces, básicamente, la expresión dice '' If LastBackUpTaken.Value = '' Not Yet Taken '', devuelve el color Rojo. Si no está "Todavía no se ha tomado", verifique si la cadena es una fecha. Si no es una fecha, devuelve el color rojo. Si es una fecha, haga los cálculos y devuelva el color apropiado.

Esta expresión funciona para todos los campos de texto que no tienen " Not Yet Taken " como su texto Para los campos que sí tienen "Todavía no tomado" ya que su texto no tiene ningún conjunto de colores.

EDITAR: también recibo un error de conversión que olvidé mencionar, siempre que el texto es "Todavía no tomado"

¿Alguna idea?

¿Fue útil?

Solución

Escriba una función VB para devolver la cadena de color en la pestaña Código de las Propiedades del informe. Aquí puede usar construcciones de lenguaje con las que se sienta cómodo (declaraciones de casos, declaraciones regulares de if, etc.). La lógica también será más fácil de leer.

Public Function GetBackgroundColor(ByVal DateString as String) As String
    'plain old vb syntax here
End Function

En la expresión para la propiedad de color de fondo:

=Code.GetBackgroundColor(Fields!LastBackUpTaken.Value)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top