문제

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)

자세한 내용은 이것에 있습니다 록스 기사

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)

VB를 사용하지 않고 이 문제를 해결하는 유일한 효과적인 방법은 행 그룹화 내부(및 열 그룹화 외부)에 행 그룹화 모듈로 값을 "저장"하고 이를 열 그룹화 내에서 명시적으로 참조하는 것입니다.이 솔루션을 찾았습니다.

http://ankeet1.blogspot.com/2009/02/alternating-row-Background-color-for.html

그러나 Ankeet은 무슨 일이 일어나고 있는지 설명하는 데 최선을 다하지 않으며 그의 솔루션은 상수 값에 대한 그룹화를 만드는 불필요한 단계를 권장하므로 다음은 단일 행 그룹 RowGroup1이 있는 행렬에 대한 단계별 프로세스입니다.

  1. RowGroup1 내에 새 열을 만듭니다.이에 대한 텍스트 상자의 이름을 RowGroupColor와 같은 이름으로 바꿉니다.
  2. RowGroupColor의 텍스트 상자 값을 다음으로 설정합니다.

    =iif(RunningValue(Fields![행그룹필드].Value ,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")

  3. 모든 행 셀의 BackgroundColor 속성을 다음으로 설정합니다.

    "=ReportItems!RowGroupColor.Value"

  4. RowGroupColor 열의 너비를 0pt로 설정하고 Cangrow를 False로 설정하여 클라이언트에서 숨기십시오.

짜잔!이는 또한 이 스레드에서 언급된 많은 문제를 해결합니다.

  • 하위 그룹에 대한 자동 재설정:해당 RowGroup에 새 열을 추가하고 RunningValue ~에 그것은 그룹 가치.
  • True/False 전환에 대해 걱정할 필요가 없습니다.
  • 색상은 쉽게 수정할 수 있도록 한 곳에만 보관됩니다.
  • 행 또는 열 그룹에서 교대로 사용할 수 있습니다(너비 대신 높이를 0으로 설정).

SSRS가 텍스트 상자의 값 이외의 속성을 노출한다면 정말 좋을 것입니다.행 그룹 텍스트 상자의 BackgroundColor 속성에 이러한 종류의 계산을 입력한 다음 다른 모든 셀에서 ReportItems!RowGroup.BackgroundColor로 참조할 수 있습니다.

아아, 우리는 꿈을 꿀 수 있습니다 ...

내 문제는 행의 모든 ​​열이 동일한 배경을 갖기를 원한다는 것입니다.나는 행과 열을 기준으로 그룹화했으며 여기에서 상위 두 가지 솔루션을 얻었습니다. 모두 배경색이 있는 열 1의 행, 배경이 흰색인 열 2의 모든 행, 배경색이 있는 열 3의 모든 행 등입니다.마치 RowNumber 그리고 bOddRow (Catch22 솔루션 중) 이를 무시하고 새 행으로만 교대하는 대신 내 열 그룹에 주의를 기울이십시오.

내가 원했던 건 모두를 위한 거야 기둥 1행의 모든 ​​열에 흰색 배경이 적용되고, 2행의 모든 ​​열에 색상이 지정된 배경이 적용되며, 3행의 모든 ​​열에 흰색 배경이 적용되는 식입니다.선택한 답변을 사용하여 이 효과를 얻었지만 통과하는 대신 Nothing 에게 RowNumber, 내 열 그룹의 이름을 전달했습니다.

=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")

이것이 다른 사람에게 유용할 수 있다고 생각했습니다.

나는 이 트릭이 여기서 논의되지 않는다고 생각한다.여기 있습니다.

모든 유형의 복잡한 매트릭스에서, 대체 셀 색상, Row Wise 또는 Column Wise를 원할 때, 작동 솔루션은

셀 열의 대체 색상을 원한다면,

  1. "열 그룹"에서 보고서 디자인보기의 오른쪽 하단에, "gakeparentgroup"이라는 이름의 1 (표현 사용)에 가짜 상위 그룹을 만듭니다.
  2. 그런 다음 보고서 설계에서 대안으로 채색 할 셀을 대안으로 다음 배경색 표현식을 사용하십시오.

=IIF(RunningValue( Fields![ColumnGroupField].Value, countDistinct, "FakeParentGroup" ) MOD 2, "White", "LightGrey")

그게 다야.

대체 색상 행과 동일하므로 그에 따라 솔루션을 편집해야 합니다.

메모:여기에서는 그에 따라 셀 테두리를 설정해야 하는 경우가 있는데, 일반적으로 테두리가 사라집니다.

또한 가짜 상위 그룹을 만들 때 사진에 제공된 보고서에서 값 1을 삭제하는 것을 잊지 마세요.

전체 보고서에 대해 대체 색상이 필요한 경우 보고서의 보고서 전체 ID 행 번호에 대해 Tablix가 바인딩된 DataSet을 사용하고 이를 RowNumber 함수에서 사용할 수 있습니다.

=IIf(RowNumber("DataSet1")  Mod 2 = 1, "White","Blue")

@Aditya의 답변은 훌륭하지만 행의 첫 번째 셀(행 배경 서식 지정용)에 누락된 값(열/행 그룹 및 누락된 값이 있는 복잡한 테이블릭스)이 있는 경우 서식이 적용되지 않는 경우가 있습니다.

@Aditya의 솔루션은 다음을 영리하게 활용합니다. countDistinct 에 의한 결과 runningValue 테이블릭스(행) 그룹 내에서 행 번호를 식별하는 함수입니다.첫 번째 셀에 누락된 값이 있는 테이블릭스 행이 있는 경우 runningValue 증가하지 않습니다 countDistinct 결과를 반환하며 이전 행의 번호를 반환합니다(따라서 해당 셀의 형식에 영향을 미칩니다).이를 설명하려면 추가 항을 추가하여 상쇄해야 합니다. countDistinct 값.내 생각은 행 그룹 자체에서 첫 번째 실행 값을 확인하는 것이었습니다(아래 코드 조각의 3행 참조).

=iif(
    (RunningValue(Fields![RowGroupField].Value, countDistinct, "FakeOrRealImmediateParentGroup")
    + iif(IsNothing(RunningValue(Fields![RowGroupField].Value, First, "GroupForRowGroupField")), 1, 0)
    ) mod 2, "White", "LightGrey")

도움이 되었기를 바랍니다.

누군가 아래 코드에서 나머지 필드를 false로 바꾸는 논리를 설명할 수 있습니까(위 게시물에서)

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

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

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를 모두 처음 접했기 때문에 개선의 여지가 많다고 강력히 의심하지만 기본 아이디어는 타당해 보이고 (나에게도 유용했기 때문에) 여기서는 버리고 싶었습니다.

행 공간이 있는 그룹화된 테이블릭스에서 이러한 모든 솔루션을 시도했지만 전체 보고서에서 아무 것도 작동하지 않았습니다.결과는 중복된 색상의 행이었고 다른 솔루션에서는 교대로 열이 발생했습니다!

다음은 Column Count를 사용하여 제가 작성한 함수입니다.

Private bOddRow As Boolean
Private cellCount as Integer

Function AlternateColorByColumnCount(ByVal OddColor As String, ByVal EvenColor As String, ByVal ColCount As Integer) As String

if cellCount = ColCount Then 
bOddRow = Not bOddRow
cellCount = 0
End if 

cellCount  = cellCount  + 1

if bOddRow Then
 Return OddColor
Else
 Return EvenColor
End If

End Function

7열 테이블릭스의 경우 행(셀) 배경색에 다음 표현식을 사용합니다.

=Code.AlternateColorByColumnCount("LightGrey","White", 7)

위의 답변 중 어느 것도 내 매트릭스에서 작동하지 않는 것 같아서 여기에 게시합니다.

http://reportingservicestnt.blogspot.com/2011/09/alternate-colors-in-matrixpivot-table.html

내 행렬 데이터에 누락된 값이 있어서 ahmad의 솔루션이 작동하도록 할 수는 없었지만 이 솔루션은 나에게 효과적이었습니다

기본 아이디어는 색상을 포함하는 가장 안쪽 그룹에 하위 그룹과 필드를 만드는 것입니다.그런 다음 해당 필드 값을 기반으로 행의 각 셀 색상을 설정합니다.

나에게 도움이 된 다른 답변을 약간 수정했습니다.내 그룹에는 그룹화할 두 개의 값이 있으므로 두 값을 모두 첫 번째 인수에 +로 넣어 올바르게 교대로 사용할 수 있었습니다.

= Iif ( RunningValue (Fields!description.Value + Fields!name.Value, CountDistinct, Nothing) Mod 2 = 0,"#e6eed5", "Transparent")

행과 열 그룹을 모두 사용하는 경우, 같은 행임에도 열 간에 색상이 번갈아 나타나는 문제가 있었습니다.행이 변경될 때만 교체되는 전역 변수를 사용하여 이 문제를 해결했습니다.

Public Dim BGColor As String = "#ffffff"

Function AlternateColor() As String
  If BGColor = "#cccccc" Then
    BGColor = "#ffffff"
    Return "#cccccc"
  Else
    BGColor = "#cccccc"
    Return "#ffffff"
  End  If
End Function

이제 첫 번째 대체하려는 행의 열에서 색상 표현식을 다음과 같이 설정합니다.

=코드.대체색상()

-

나머지 열에서는 모두 다음과 같이 설정합니다.

=코드.BG색상

이렇게 하면 첫 번째 열이 그려진 후에만 색상이 번갈아 표시됩니다.

이는 각 열에 대해 수학 계산을 수행할 필요가 없기 때문에 성능도 (검증 불가능하게) 향상시킬 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top