SQL Server Reporting Services 보고서에 대체 행 색 추가
SQL Server Reporting Services 보고서에서 교대 행을 음영 처리하는 방법은 무엇입니까?
편집: 아래에는 빠르고 간단한 것부터 복잡하고 포괄적인 것까지 다양한 좋은 답변이 나열되어 있습니다.아아, 나는 하나만 선택할 수 있어요...
표 행의 BackgroundColor 속성으로 이동하여 "표현식...."
다음 식을 사용합니다.
= 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
그런 다음 각 셀에서 배경색을 다음과 같이 설정합니다.
=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
그래서 저는 세 가지 다른 종류의 세포 배경을 가지고 있습니다.
- 데이터 행의 첫 번째 열에는 = 코드가 있습니다.대체 색상("AliceBlue", "White", True)(이전 답변과 동일합니다.)
- 데이터 행의 나머지 열에는 = 코드가 있습니다.대체 색상("AliceBlue", "White", False)(또한 이전 답변과 동일합니다.)
- 그룹화 행의 첫 번째 열에 = 코드가 있습니다.색상 다시 시작("AliceBlue")(새 버전입니다.)
- 그룹화 행의 나머지 열에는 = 코드가 있습니다.AliceBlue("AliceBlue", "White", False) (이전에 사용된 것이지만 그룹화 행에 대한 언급은 없습니다.
이것은 나에게 효과가 있습니다.그룹화 행을 비색상 또는 다른 색으로 지정하려면 그룹화 행을 변경하는 방법이 이 방법에서 상당히 분명해야 합니다.
이 코드를 개선하기 위해 수행할 수 있는 작업에 대한 의견을 자유롭게 추가하십시오.저는 SSRS와 VB 모두에 대해 처음이라 개선의 여지가 충분하다고 강하게 의심하지만, 기본 아이디어는 건전한 것처럼 보여서 (그리고 저에게 유용했습니다) 여기에 버리고 싶었습니다.
그룹 머리글/바닥글:
=iif(RunningValue(*group on field*,CountDistinct,"*parent group name*") Mod 2,"White","AliceBlue")
또한 이를 사용하여 각 그룹 내의 행 색상 수를 "재설정"할 수 있습니다.각 하위 그룹의 첫 번째 세부 정보 행이 흰색으로 시작하기를 원했으며, 이 솔루션(세부 정보 행에서 사용할 경우)을 사용하여 다음과 같은 작업을 수행할 수 있었습니다.
=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의 해결책은 저에게 잘 맞습니다.그러나 미리보기 시 "투명"이 올바른 배경색이 아니라는 경고가 표시되었습니다.SSRS에서 보고서 요소의 배경색 설정에서 빠른 수정을 찾았습니다."투명" 대신 "아무것도 사용 안 함"
= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
VB를 사용하지 않고 이 문제를 해결하는 유일한 효과적인 방법은 행 그룹 내에서 행 그룹화 모듈로 값을 "저장"하고 열 그룹화 내에서 이 값을 명시적으로 참조하는 것입니다.이 솔루션을 찾은 곳은
http://ankeet1.blogspot.com/2009/02/alternating-row-background-color-for.html
그러나 Ankeet은 무슨 일이 일어나고 있는지 설명하는 최선의 작업이 아니며, Ankeet의 솔루션은 일정한 값으로 그룹을 만드는 불필요한 단계를 권장합니다. 따라서 단일 행 그룹 RowGroup1이 있는 행렬에 대한 단계별 프로세스는 다음과 같습니다.
- RowGroup1 내에 새 열을 만듭니다.이 텍스트 상자의 이름을 RowGroupColor와 같은 이름으로 변경합니다.
RowGroupColor의 텍스트 상자 값을 다음으로 설정합니다.
=iif(RunningValue(Fields![RowGroupField].Value ,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")모든 행 셀의 BackgroundColor 속성을 다음으로 설정합니다.
"=ReportItems!RowGroupColor.Value"- RowGroupColor 열의 너비를 0pt로 설정하고 CanGrow를 false로 설정하여 클라이언트에서 숨깁니다.
Voila! 이것은 또한 이 스레드에서 언급된 많은 문제를 해결합니다.
- 하위 그룹에 대한 자동 재설정:해당 행 그룹에 대해 그룹 값에 대해 실행 값을 수행하는 새 열을 추가하기만 하면 됩니다.
- True/False 토글에 대해 걱정할 필요가 없습니다.
- 색상은 한 곳에만 고정되어 있어 쉽게 수정할 수 있습니다.
- 행 또는 열 그룹에서 상호 교환하여 사용할 수 있습니다(폭 대신 높이를 0으로 설정하기만 하면 됩니다.
SSRS가 텍스트 상자의 값 외에 속성을 노출하면 멋질 것입니다.행 그룹 텍스트 상자의 BackgroundColor 속성에 이러한 종류의 계산을 입력한 다음 ReportItems로 참조하면 됩니다!행 그룹.다른 모든 셀의 배경색입니다.
아 글쎄, 우리는 꿈을 꿀 수 있어요...
제 문제는 한 줄에 있는 모든 열의 배경이 같았으면 좋겠다는 것이었습니다.행별 및 열별로 그룹화했습니다. 여기서 상위 두 솔루션을 사용하면 1열의 모든 행이 배경색으로 표시되고, 2열의 모든 행이 배경색으로 표시되며, 3열의 모든 행이 배경색으로 표시됩니다.마치RowNumber그리고.bOddRow(Catch22의 솔루션 중) 이를 무시하고 새 행과 교대하는 대신 내 열 그룹에 주의를 기울입니다.
제가 원했던 것은 1행의 모든 열은 흰색 배경을, 2행의 모든 열은 색 배경을, 3행의 모든 열은 흰색 배경을 가지라는 것입니다.합격 대신 선택한 답변을 사용하여 이 효과를 얻었습니다.NothingRowNumber컬럼 그룹의 이름을 전달했습니다. 예를 들어 전달했습니다.
=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")
이것이 다른 사람에게 유용할 것이라고 생각했습니다.
저는 이 속임수가 여기서 논의되지 않았다고 생각합니다.자, 여기 있습니다.
어떤 유형의 복잡한 행렬에서도 행 단위 또는 열 단위로 대체 셀 색상을 원할 때, 작업 솔루션은 다음과 같습니다.
만약 당신이 다른 색의 셀을 열로 원하신다면,
- 보고서 설계 보기의 오른쪽 하단 모서리에 있는 "열 그룹"에서 "FakeParentGroup"이라는 이름의 1(식 사용)에 가짜 상위 그룹을 만듭니다.
- 그런 다음 보고서 설계에서 대체 색상으로 지정할 셀에 대해 다음 배경색 표현식을 사용합니다.
=IIF(실행값(필드![ColumnGroupField].Value, countDistinct, "FakeParentGroup") MOD 2, "White", "LightGrey")
이상입니다.
대체 색상 행에 대해서도 마찬가지이며, 그에 따라 솔루션을 선택하면 됩니다.
참고: 여기서는 때때로 세포의 경계를 적절히 설정해야 합니다. 보통은 사라집니다.
또한 가짜 부모 그룹을 만들 때 사진에 나온 보고서에서 값 1을 삭제하는 것을 잊지 마십시오.
전체 보고서에 대해 대체 색상이 필요한 경우 보고서의 전체 ID 행 번호에 대해 Tablix가 바인딩된 데이터 설정을 사용하고 RowNumber 함수에서 이를 사용할 수 있습니다.
=IIf(RowNumber("DataSet1") Mod 2 = 1, "White","Blue")
@Aditya의 답변은 좋지만 행의 첫 번째 셀(행 배경 포맷용)에 결측값이 있는 경우(열/행 그룹이 있고 결측값이 있는 복잡한 표제에서) 형식이 해제되는 경우가 있습니다.
은 @아디티아솔영활용다니합게리하루의은션▁@ly▁@▁leverages▁clever아다▁solution를 교묘하게 활용합니다.countDistinct의 runningValue테이블릭스(행) 그룹 내에서 행 번호를 식별하는 함수입니다.첫 번째 셀에 결측값이 있는 테이블릭스 행이 있는 경우runningValue 가하지않countDistinct결과를 입력하면 이전 행의 번호가 반환됩니다(따라서 해당 셀의 형식에 영향을 미칩니다).이를 설명하려면 다음을 상쇄하기 위해 추가 항을 추가해야 합니다.countDistinct행의 첫 value. 행 그룹 자체의 첫 번째 실행 값을 확인했습니다(아래 스니펫의 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
그래서 저는 세 가지 다른 종류의 세포 배경을 가지고 있습니다.
- 데이터 행의 첫 번째 열에는 = 코드가 있습니다.대체 색상("AliceBlue", "White", True)(이전 답변과 동일합니다.)
- 데이터 행의 나머지 열에는 = 코드가 있습니다.대체 색상("AliceBlue", "White", False)(또한 이전 답변과 동일합니다.)
- 그룹화 행의 첫 번째 열에 = 코드가 있습니다.색상 다시 시작("AliceBlue")(새 버전입니다.)
- 그룹화 행의 나머지 열에는 = 코드가 있습니다.AliceBlue("AliceBlue", "White", False) (이전에 사용된 것이지만 그룹화 행에 대한 언급은 없습니다.
이것은 나에게 효과가 있습니다.그룹화 행을 비색상 또는 다른 색으로 지정하려면 그룹화 행을 변경하는 방법이 이 방법에서 상당히 분명해야 합니다.
이 코드를 개선하기 위해 수행할 수 있는 작업에 대한 의견을 자유롭게 추가하십시오.저는 SSRS와 VB 모두에 대해 처음이라 개선의 여지가 충분하다고 강하게 의심하지만, 기본 아이디어는 건전한 것처럼 보여서 (그리고 저에게 유용했습니다) 여기에 버리고 싶었습니다.
행 공간이 있는 그룹화된 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열 Tablix의 경우 행( 셀) 백컬러에 대해 다음 식을 사용합니다.
=Code.AlternateColorByColumnCount("LightGrey","White", 7)
위의 답변 중 어떤 것도 제 매트릭스에서 작동하지 않는 것 같았기 때문에, 저는 이것을 여기에 올립니다.
http://reportingservicestnt.blogspot.com/2011/09/alternate-colors-in-matrixpivot-table.html
매트릭스 데이터에 결측값이 포함되어 있어서 아흐마드의 솔루션을 사용할 수 없었지만 이 솔루션은 저에게 효과가 있었습니다.
기본 아이디어는 색상을 포함하는 가장 안쪽 그룹에 하위 그룹과 필드를 만드는 것입니다.그런 다음 해당 필드 값을 기준으로 행의 각 셀에 대한 색상을 설정합니다.
저에게 효과가 있었던 다른 답변들을 약간 수정했습니다.우리 그룹에는 그룹화해야 할 두 개의 값이 있기 때문에 +를 사용하여 두 값을 첫 번째 Arg에 모두 넣을 수 있었습니다.
= 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컬러
이렇게 하면 첫 번째 열이 그려진 후에만 색상이 번갈아 표시됩니다.
각 열에 대해 수학 계산을 수행할 필요가 없기 때문에 성능도 (검증할 수 없을 정도로) 향상될 수 있습니다.
언급URL : https://stackoverflow.com/questions/44376/add-alternating-row-color-to-sql-server-reporting-services-report
'programing' 카테고리의 다른 글
| LowerCase에 대한 NullPointeron이지만 나는 그 방법을 어디에서도 사용하지 않습니다. (0) | 2023.06.10 |
|---|---|
| javadoc for Python 설명서 사용 (0) | 2023.06.10 |
| 목록에 추가하는 것보다 목록 이해가 훨씬 빠른 이유는 무엇입니까? (0) | 2023.06.10 |
| Apache POI를 사용하여 내 xlsx 시트를 Java 개체로 변환하는 방법 (0) | 2023.06.10 |
| 데이터 프레임에서 숫자 열만 선택 (0) | 2023.06.10 |