[sql-server] SQL Server Reporting Services 보고서에 대체 행 색 추가

SQL Server Reporting Services 보고서에서 대체 행을 어떻게 음영 처리합니까?


편집 : 아래에 나열된 좋은 답변 무리가있다 -에서 신속 하고 간단한복잡하고 포괄적 인가 . 아아, 하나만 선택할 수 있습니다 …



답변

테이블 행의 BackgroundColor 속성으로 이동하여 “Expression …”을 선택하십시오.

이 표현을 사용하십시오 :

= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")

이 트릭은 보고서의 여러 영역에 적용 할 수 있습니다.

그리고 .NET 3.5 이상에서는 다음을 사용할 수 있습니다.

= If(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")

담당자를 찾지 않음-나는이 질문을 직접 조사하고 공유 할 것이라고 생각했습니다.


답변

IIF (RowNumber …)를 사용하면 행을 그룹화 할 때 일부 문제가 발생할 수 있으며 다른 대안은 간단한 VBScript 함수를 사용하여 색상을 결정하는 것입니다.

조금 더 노력하지만 기본 솔루션으로는 충분하지 않으면 좋은 대안입니다.

기본적으로 다음과 같이 코드를 보고서에 추가합니다.

Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
         ByVal EvenColor As String, ByVal Toggle As Boolean) As String
    If Toggle Then bOddRow = Not bOddRow
    If bOddRow Then
        Return OddColor
    Else
        Return EvenColor
    End If
End Function

그런 다음 각 셀에서 다음과 같이 BackgroundColor를 설정하십시오.

=Code.AlternateColor("AliceBlue", "White", True)

자세한 내용은이 Wrox 기사에 있습니다.


답변

Catch22의 솔루션을 사용할 때 체스 효과가 나타났습니다. 매트릭스에는 디자인에 둘 이상의 열이 있기 때문입니다. 그 표현은 나를 위해 잘 작동했습니다 :

=iif(RunningValue(Fields![rowgroupfield].Value.ToString,CountDistinct,Nothing) Mod 2,"Gainsboro", "White")


답변

@ Catch22의 솔루션을 변경했습니다. 색상 중 하나를 변경하기로 결정하면 각 필드에 들어가야한다는 생각이 마음에 들지 않습니다. 색상 변수를 변경해야하는 수많은 필드가있는 보고서에서 특히 중요합니다.

'*************************************************************************
' -- Display alternate color banding (defined below) in detail rows
' -- Call from BackgroundColor property of all detail row textboxes
'*************************************************************************
Function AlternateColor(Byval rowNumber as integer) As String
    Dim OddColor As String = "Green"
    Dim EvenColor As String = "White"

    If rowNumber mod 2 = 0 then 
        Return EvenColor
    Else
        Return OddColor
    End If
End Function

색상을 수락하는 기능에서 사용할 색상이 포함 된 기능으로 변경했습니다.

그런 다음 각 필드에 다음을 추가하십시오.

=Code.AlternateColor(rownumber(nothing))

이는 각 필드의 배경색에서 색상을 수동으로 변경하는 것보다 훨씬 강력합니다.


답변

내가 주목 한 한 가지는 상위 두 가지 방법 중 어느 것도 그룹에서 첫 번째 행의 색을 나타내는 개념이 없다는 것입니다. 그룹은 이전 그룹의 마지막 줄과 반대 색상으로 시작합니다. 나는 그룹이 항상 같은 색으로 시작하기를 원했습니다 … 각 그룹의 첫 번째 행은 항상 흰색이어야하고 다음 행은 색이 지정되어야합니다.

기본 개념은 각 그룹이 시작될 때 토글을 재설정하는 것이므로 약간의 코드를 추가했습니다.

Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
         ByVal EvenColor As String, ByVal Toggle As Boolean) As String
    If Toggle Then bOddRow = Not bOddRow
    If bOddRow Then
        Return OddColor
    Else
        Return EvenColor
    End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
    bOddRow = True
    Return OddColor
End Function

이제 세 가지 종류의 셀 배경이 있습니다.

  1. 데이터 행의 첫 번째 열에는 = Code.AlternateColor ( “AliceBlue”, “White”, True)가 있습니다 (이전 답변과 동일합니다).
  2. 데이터 행의 나머지 열은 = Code.AlternateColor ( “AliceBlue”, “White”, False)입니다 (이것은 또한 이전 답변과 동일합니다).
  3. 그룹화 행의 첫 번째 열은 = Code.RestartColor ( “AliceBlue”)입니다 (이것은 새로운 기능입니다).
  4. 그룹화 행의 나머지 열에는 = Code.AlternateColor ( “AliceBlue”, “White”, False)가 있습니다 (이전에 사용되었지만 행 그룹화에 대해서는 언급되지 않았습니다).

이것은 나를 위해 작동합니다. 그룹화 행을 비색 또는 다른 색으로 만들려면이 방법을 사용하여 변경하는 방법이 분명해야합니다.

이 코드를 개선하기 위해 수행 할 수있는 작업에 대한 의견을 자유롭게 추가하십시오. SSRS와 VB를 처음 접하는 사람이므로 개선 할 여지가 충분하다고 생각하지만 기본 아이디어는 건전 해 보입니다 (유용했습니다). 나를 위해) 그래서 나는 여기서 버리고 싶었다.


답변

그룹 머리글 / 바닥 글의 경우 :

=iif(RunningValue(*group on field*,CountDistinct,"*parent group name*") Mod 2,"White","AliceBlue")

이것을 사용하여 각 그룹 내에서 행 색상 수를 “재설정”할 수도 있습니다. 각 하위 그룹의 첫 번째 세부 행이 White로 시작하기를 원했고이 솔루션 (세부 행에서 사용되는 경우)이 가능해졌습니다.

=IIF(RunningValue(Fields![Name].Value, CountDistinct, "NameOfPartnetGroup") Mod 2, "White", "Wheat")

참조 : http://msdn.microsoft.com/en-us/library/ms159136(v=sql.100).aspx


답변

Michael Haren의 솔루션이 저에게 잘 작동합니다. 그러나 미리보기 할 때 “투명”이 유효한 BackgroundColor가 아니라는 경고가 나타납니다. SSRS에서 보고서 요소의 배경색 설정 에서 빠른 수정 사항을 찾았습니다
. “투명”대신에 아무것도 사용하지 마십시오

= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)