Изменение цветов строк в отчете SSRS через значения данных - PullRequest
2 голосов
/ 20 июля 2011

Я знаю, что вы можете установить BackgroundColor для чередования двух цветов с довольно простым выражением.У меня есть столбец, который содержит значения даты, упорядоченные по порядку.По сути, я хочу, чтобы BackgroundColor чередовался каждый раз, когда значение даты изменяется по мере того, как вы переходите по строкам.Я получил часть пути с этим кодом:

= iif (Previous (Fields! Req_Del_Dt.Value) = (Fields! Req_Del_Dt.Value), "White", "Lavender")

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

http://imageshack.us/photo/my-images/24/alternatingcolors.jpg/

Как я могу сделать так, чтобы цвет менялся на один цвет для всей даты (который может быть 3 ряда) изатем «переключиться» на другой цвет, когда происходит следующее изменение даты?Я думаю, что я на правильном пути, но я просто не могу понять это.

Я был бы очень признателен за любые предложения или комментарии.Спасибо!

Ответы [ 7 ]

7 голосов
/ 15 ноября 2012
=IIF(RunningValue(Fields!Address.Value, CountDistinct, Nothing) MOD 2 = 1, "White", "Lavender")

Для меня это помогает.

1 голос
/ 24 марта 2017

У меня была похожая проблема:

  • Табликс / Таблица в SSRS 16
  • Группировка невозможна (будет мешать другим функциям таблицы)
  • Нужно чередовать цветные блоки строк с одинаковым значением в поле даты
  • то же значение даты может появиться снова (это важно, потому что Ответ Nanus , т. Е. Использование CountDistinct зависит от того же значения (даты), которое больше не появится в более позднем блоке).

Для меня код в Loki70 пересмотренный ответ не сработал. Первая строка из нескольких случайных блоков строк будет иметь чередующиеся цвета в ячейках. Однако, как только я переписал код, он работал:

Private _dateCount As Integer = 0
Private RowNumberRunner as Integer = 0
Private ColorValue as String = ""

Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime, MyRowNumber as Integer) As String

   If MyRowNumber <> RowNumberRunner Then 
      RowNumberRunner = MyRowNumber
      If previousDate <> currentDate Then 
         _dateCount = _dateCount + 1
      End If
   End If

   If _dateCount Mod 2 = 1 Then 
      ColorValue = "White"
   Else ColorValue = "Lavender"
   End If

   Return ColorValue 
End Function

Понятия не имею, почему это работает, а предыдущий код - нет. Это та же функциональность, просто написано по-разному. Он называется так же:

=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value, RowNumber(Nothing))
1 голос
/ 21 июля 2011

Понял - я должен был постараться, прежде чем ответить.Мне пришлось отслеживать текущий номер строки и переключать значение только на новые строки.Пересмотренный код:

Private _dateCount As Integer = 0
Private CurRowNumber as Integer = 0
Private ColorValue as String = ""

Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime, MyRowNumber as Integer) As String

    'Check if this is a new row number...
    If MyRowNumber <> CurRowNumber then
       CurRowNumber = CurRowNumber  + 1 'New row, so increment counter

        If previousDate = currentDate Then
            ' Do nothing
        Else
                _dateCount = _dateCount + 1
        End If

        If _dateCount Mod 2 = 0 Then
                ColorValue = "White"
        Else
                ColorValue = "Lavender"
        End If
   End If

        Return ColorValue 'Always return a value (for columns other than the first one)

End Function

Вызывается так:

=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value, RowNumber(Nothing))

Еще раз спасибо за отличный ответ и ответ!

1 голос
/ 21 июля 2011

Вы можете написать собственный код.Например:

Private _dateCount As Integer = 0
Function GetDateRowColor(ByVal previousDate As DateTime, ByVal currentDate As DateTime) As String
    If previousDate = currentDate Then
        ' Do nothing
    Else
        _dateCount++
    End If

    If _dateCount Mod 2 = 0 Then
        Return "White"
    Else
        Return "Lavender"
    End If
End Function

Затем используйте выражение в цвете фона, например:

=Code.GetDateRowColor(Previous(Fields!Req_Del_Dt.Value), Fields!Req_Del_Dt.Value)

HTH.

0 голосов
/ 23 января 2016

вот простое решение.во-первых, я собираюсь предположить, что вы работаете с MSSQL, поскольку вопрос касается SSRS.Вы можете выбирать значения непосредственно из запроса, поэтому в самом отчете вы просто устанавливаете цвет фона в соответствии с одним значением, а не диапазоном ...

скажем, вы хотите представить в отчете Req_Del_Dt.Value с другим цветом, в соответствии с его диапазоном .... так что вы можете запросить что-то вроде этого>

select *,
    case when Req_Del_Dt < 30 then 1
    when Req_Del_Dt between 30 and 60 then 2
    when Req_Del_Dt between 61 and 90 then 3
    when Req_Del_Dt between 91 and 150 then 4
    else 5 end as color_range
from source_table

, имея, что в SSRS вы просто переходите к свойству BackgroundColor в разделе Fillтекстового поля, в котором вы отображаете req_del_det, выберите цветовое выражение и напишите что-то вроде этого>

    =SWITCH(Fields!color_range.Value = 1, "#ffffff", 
    Fields!color_range.Value = 2, "#ffebeb",
    Fields!color_range.Value = 3, "#ffd8d8",
    Fields!color_range.Value = 4, "#ffc4c4",
    Fields!color_range.Value = 5, "#ffb1b1")
0 голосов
/ 24 апреля 2013

У меня была та же проблема, что и у Loki70, и мне очень понравилось решение Nanu.

Однако, увидев результат, я захотел сделать больше. Я хотел, чтобы первичная информация появлялась один раз, но «скрывала» строки после первой строки группы. Используя код Nanu и Loki70 вместе, я смог установить цвет шрифта для строк после первой строки на тот же цвет, что и для заливки. Тем самым скрывая текст для этой ячейки.

=IIF(Previous(Fields!Req_Del_Dt.Value) <> (Fields!Req_Del_Dt.Value), "Black", 
    IIF(RunningValue(Fields!Req_Del_Dt.Value, CountDistinct, Nothing) MOD 2 = 1, 
    "White", "Lavender"))

Я использую это, чтобы скрыть первые пару ячеек строки, которые отображают ту же информацию, а затем отобразить другие ячейки, которые отличаются для этой подгруппы.

0 голосов
/ 14 августа 2012
Public Function Setcolor(ByVal Runs AS Integer,ByVal Wickets AS Integer) AS String
    setcolor="Transperent"
    IF(Runs >=500 AND Wickets >=10) THEN return "Green"
    END IF
END Function
...