Проблема оценки выражения SSRS - PullRequest
1 голос
/ 28 ноября 2008

У меня проблема с выражениями в отчетах. Я окрашиваю фон текстового поля в таблице в зависимости от значения в нем. Текст в поле относится к резервным копиям для 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 =« Еще не принято », возвращает красный цвет. Если это не« Еще не принято », проверьте, является ли строка датой. Если это не так не дата, верните красный цвет. Если это дата, сделайте расчеты и верните соответствующий цвет.

Это выражение работает для всех текстовых полей, для которых в качестве текста не указано "Пока не принято". Для полей, для которых в качестве текста указано «Пока не принято», цвет не установлен.

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

Есть идеи?

1 Ответ

4 голосов
/ 28 ноября 2008

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

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

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

=Code.GetBackgroundColor(Fields!LastBackUpTaken.Value)
...