Вопрос

У меня проблема с выражениями в отчетах. Я окрашиваю фон текстового поля в таблице в зависимости от значения в нем. Текст в поле относится к резервным копиям для SQL Server. Значением является либо дата, либо текст «Еще не принято». Если дата более 2 дней, я хочу, чтобы фон был желтым. Если возраст его более недели или значение даты «Еще не принято», я хочу, чтобы фон был красным. В противном случае он будет зеленым.

Проблема, с которой я столкнулся с тех пор, как начал работать с отчетами для SSRS (несколько недель назад), заключается в том, что мои выражения, кажется, полностью оценены. В операторе IF будут оцениваться как истинные, так и ложные значения, даже если будет использовано только одно из них.

Это становится проблемой, потому что "Еще не принято" явно не дата и для работы с датами мне нужно конвертировать строку даты в дату. Вот код, который у меня есть в настоящее время:

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

Таким образом, в основном выражение гласит: «Если LastBackUpTaken.Value =« Еще не принято », возвращает красный цвет. Если это не «Еще не принято», проверьте, является ли строка датой. Если это не дата, верните красный цвет. Если это дата, сделайте расчеты и верните соответствующий цвет.

Это выражение работает для всех текстовых полей, которые не имеют " Еще не принято " как его текст. Для полей, которые имеют "Еще не принято" поскольку его текст не имеет какого-либо установленного цвета.

РЕДАКТИРОВАТЬ: я также получаю ошибку преобразования, которую я забыл упомянуть, всякий раз, когда текст "Еще не получен"

Есть идеи?

Это было полезно?

Решение

Напишите функцию VB для возврата строки цвета на вкладке «Код» в свойствах отчета. Здесь вы можете использовать языковые конструкции, которые вам удобны (операторы case, регулярные операторы if и т. Д.). Логика также будет легче читать назад.

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

В выражении для свойства цвета фона:

=Code.GetBackgroundColor(Fields!LastBackUpTaken.Value)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top