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")
담당자를 찾지 않음-나는이 질문을 직접 조사하고 공유 할 것이라고 생각했습니다.
[rsInvalidColor] The value of the BackgroundColor property for the textbox ‘active’ is “Transparent”, which is not a valid BackgroundColor.
올바른 식과 같은 경고 메시지 가 나타납니다 =IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
. 팁 주셔서 감사합니다.
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
이제 세 가지 종류의 셀 배경이 있습니다.
이것은 나를 위해 작동합니다. 그룹화 행을 비색 또는 다른 색으로 만들려면이 방법을 사용하여 변경하는 방법이 분명해야합니다.
이 코드를 개선하기 위해 수행 할 수있는 작업에 대한 의견을 자유롭게 추가하십시오. 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이 단일 행 그룹 인 행렬에 대한 단계별 프로세스는 다음과 같습니다.
RowGroupColor의 텍스트 상자 값을 다음으로 설정하십시오.
=iif(RunningValue(Fields![RowGroupField].Value
,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")
모든 행 셀의 BackgroundColor 속성을
"=ReportItems!RowGroupColor.Value"
짜잔! 또한이 스레드에서 언급 된 많은 문제를 해결합니다.
SSRS가 텍스트 상자의 값 이외의 속성을 노출하는 것이 좋습니다. 행 그룹 텍스트 상자의 BackgroundColor 속성에 이러한 종류의 계산을 채우고 다른 모든 셀에서 ReportItems! RowGroup.BackgroundColor로 참조하면됩니다.
음, 우리는 꿈을 꿀 수 있습니다 ...
내 문제는 행의 모든 열이 동일한 배경을 갖기를 원한다는 것입니다. 나는 내가 가진 행에 의해 열을 기준으로, 2 개의 솔루션 여기에 상단이 모두 그룹화 모든 컬러 배경 컬러 배경에 열 1 행, 흰색 배경에 열 2의 모든 행, 열 셋의 모든 행을 , 등등. 그것은 마치의 RowNumber
와 bOddRow
만 새로운 행과 번갈아 것을주의하십시오 (Catch22의 솔루션) 내 열 그룹 대신 무시합니다.
내가 원하는 것은 1 행의 모든 열에 흰색 배경이 있고 2 행의 모든 열에 배경색이 있고 3 행의 모든 열에 흰색 배경이있는 것입니다. 선택한 답변을 사용 하여이 효과를 얻었지만에 전달 Nothing
하는 대신 RowNumber
열 그룹의 이름을 전달했습니다.
=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")
이것은 다른 사람에게 유용 할 수 있다고 생각했습니다.
복잡한 매트릭스의 모든 유형에서 행 단위 또는 열 단위의 대체 셀 색상을 원할 경우 작업 솔루션은 다음과 같습니다.
당신이 현명하게 다른 색의 세포를 원한다면,
= IIF (RunningValue (Fields! [ColumnGroupField] .Value, countDistinct, "FakeParentGroup") MOD 2, "흰색", "LightGrey")
그게 다야.
대체 색상 행과 동일하게 솔루션을 편집해야합니다.
참고 : 여기에서 때로는 셀의 경계를 적절하게 설정해야하며 일반적으로 사라집니다.
또한 가짜 부모 그룹을 만들 때 그림에 나온 보고서에서 값 1을 삭제하는 것을 잊지 마십시오.
@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")
도움이 되었기를 바랍니다.
누군가 아래 코드에서 위의 나머지 필드를 거짓으로 바꾸는 논리를 설명 할 수 있습니까?
내가 주목 한 한 가지는 상위 두 가지 방법 중 어느 것도 그룹에서 첫 번째 행의 색을 나타내는 개념이 없다는 것입니다. 그룹은 이전 그룹의 마지막 줄과 반대 색상으로 시작합니다. 나는 그룹이 항상 같은 색으로 시작하기를 원했습니다 ... 각 그룹의 첫 번째 행은 항상 흰색이어야하고 다음 행은 색이 지정되어야합니다.
기본 개념은 각 그룹이 시작될 때 토글을 재설정하는 것이므로 약간의 코드를 추가했습니다.
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
이제 세 가지 종류의 셀 배경이 있습니다.
이것은 나를 위해 작동합니다. 그룹화 행을 비색 또는 다른 색으로 만들려면이 방법을 사용하여 변경하는 방법이 분명해야합니다.
이 코드를 개선하기 위해 수행 할 수있는 작업에 대한 의견을 자유롭게 추가하십시오. SSRS와 VB를 처음 접하는 사람이므로 개선 할 여지가 충분하다고 생각하지만 기본 아이디어는 건전 해 보입니다 (유용했습니다). 나를 위해) 그래서 나는 여기서 버리고 싶었다.
행 공간이있는 Grouped Tablix에서 이러한 모든 솔루션을 시도했지만 전체 보고서에서 아무것도 작동하지 않았습니다. 결과는 중복 된 색의 행이었고 다른 솔루션으로 인해 열이 번갈아 나타납니다!
열 수를 사용하여 내가 작성한 함수는 다음과 같습니다.
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의 솔루션을 작동시킬 수 없었지만 이 솔루션은 저에게 효과적 이었습니다.
기본 아이디어는 색상을 포함하는 가장 안쪽 그룹에 자식 그룹과 필드를 만드는 것입니다. 그런 다음 해당 필드 값을 기준으로 행에서 각 셀의 색상을 설정하십시오.
행과 열 그룹을 모두 사용할 때 같은 행이더라도 열 사이에서 색상이 번갈아 나타나는 문제가 발생했습니다. 행이 변경 될 때만 대체되는 전역 변수를 사용 하여이 문제를 해결했습니다.
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
이제 바꾸려 는 행 의 첫 번째 열에서 색상 표현식을 다음과 같이 설정하십시오.
= Code.AlternateColor ()
-
나머지 열에서 모두 다음으로 설정하십시오.
= Code.BGColor
첫 번째 열을 그린 후에 만 색상을 번갈아 표시해야합니다.
이는 각 열에 대해 수학 계산을 수행 할 필요가 없기 때문에 (확인할 수없는) 성능도 향상시킬 수 있습니다.