¿Cómo sombrea las filas alternas en un informe de SQL Server Reporting Services?
Editar: Hay un montón de buenas respuestas enumeradas a continuación, desde rápidas y simples hasta complejas y completas . Por desgracia, solo puedo elegir uno ...
sql-server
reporting-services
formatting
Michael Haren
fuente
fuente
Respuestas:
Vaya a la propiedad BackgroundColor de la fila de la tabla y elija "Expresión ..."
Usa esta expresión:
Este truco se puede aplicar a muchas áreas del informe.
Y en .NET 3.5+ podría usar:
No busco representante: solo investigué esta pregunta y pensé en compartirla.
fuente
[rsInvalidColor] The value of the BackgroundColor property for the textbox ‘active’ is “Transparent”, which is not a valid BackgroundColor.
Parece que sería la expresión correcta=IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
. Gracias por el consejo.El uso de IIF (RowNumber ...) puede generar algunos problemas cuando se agrupan las filas y otra alternativa es usar una función VBScript simple para determinar el color.
Es un poco más de esfuerzo, pero cuando la solución básica no es suficiente, es una buena alternativa.
Básicamente, agrega código al Informe de la siguiente manera ...
Luego, en cada celda, configure el Color de fondo de la siguiente manera:
Los detalles completos están en este artículo de Wrox
fuente
Obtuve el efecto ajedrez cuando utilicé la solución de Catch22, creo que porque mi matriz tiene más de una columna en diseño. esa expresión funcionó bien para mí:
fuente
He cambiado la solución de @ Catch22 un poco, ya que no me gusta la idea de tener que ir a cada campo si decido que quiero cambiar uno de los colores. Esto es especialmente importante en los informes donde hay numerosos campos que necesitarían cambiar la variable de color.
Noté que he cambiado la función de una que acepta los colores a una que contiene los colores que se utilizarán.
Luego, en cada campo, agregue:
Esto es mucho más robusto que cambiar manualmente el color en el color de fondo de cada campo.
fuente
Una cosa que noté es que ninguno de los dos métodos principales tiene noción de qué color debe ser la primera fila en un grupo; el grupo solo comenzará con el color opuesto a la última línea del grupo anterior. Quería que mis grupos siempre comenzaran con el mismo color ... la primera fila de cada grupo siempre debe ser blanca y la siguiente fila coloreada.
El concepto básico era restablecer la palanca cuando se inicia cada grupo, así que agregué un poco de código:
Ahora tengo tres tipos diferentes de fondos celulares:
Esto funciona para mi. Si desea que la fila de agrupación no tenga color o sea de un color diferente, debería ser bastante obvio a partir de esto cómo cambiarla.
No dude en agregar comentarios sobre lo que podría hacerse para mejorar este código: soy nuevo en SSRS y VB, por lo que sospecho que hay mucho margen de mejora, pero la idea básica parece sólida (y fue útil para mí) así que quería tirarlo aquí.
fuente
para encabezados / pies de grupo:
También puede usar esto para "restablecer" el recuento de color de fila dentro de cada grupo. Quería que la primera fila de detalles en cada subgrupo comenzara con Blanco y esta solución (cuando se usa en la fila de detalles) permitió que eso sucediera:
Ver: http://msdn.microsoft.com/en-us/library/ms159136(v=sql.100).aspx
fuente
La solución de Michael Haren funciona bien para mí. Sin embargo, recibí una advertencia que decía que "Transparente" no es un Color de fondo válido en la Vista previa. Encontró una solución rápida al establecer elementos de Color de fondo de informe en SSRS . No use nada en lugar de "transparente"
fuente
La única forma efectiva de resolver esto sin usar VB es "almacenar" el valor del módulo de agrupación de filas dentro de la agrupación de filas (y fuera de la agrupación de columnas) y hacer referencia explícitamente dentro de su agrupación de columnas. Encontré esta solución en
http://ankeet1.blogspot.com/2009/02/alternating-row-background-color-for.html
Pero Ankeet no hace el mejor trabajo de explicar lo que está sucediendo, y su solución recomienda el paso innecesario de crear una agrupación en un valor constante, así que aquí está mi proceso paso a paso para una matriz con un solo grupo de filas RowGroup1:
Establezca el valor del cuadro de texto RowGroupColor en
=iif(RunningValue(Fields![RowGroupField].Value ,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")
Establezca la propiedad BackgroundColor de todas sus celdas de fila en
"=ReportItems!RowGroupColor.Value"
Voila! Esto también resuelve muchos de los problemas mencionados en este hilo:
Sería increíble si SSRS exponga propiedades además del valor en cuadros de texto. Simplemente puede rellenar este tipo de cálculo en una propiedad BackgroundColor de los cuadros de texto del grupo de filas y luego hacer referencia a ella como ReportItems! RowGroup.BackgroundColor en todas las demás celdas.
Ahh bueno, podemos soñar ...
fuente
Mi problema era que quería que todas las columnas seguidas tuvieran el mismo fondo. Agrupé tanto por fila como por columna, y con las dos soluciones principales aquí obtuve todas las filas de la columna 1 con un fondo de color, todas las filas de la columna 2 con un fondo blanco, todas las filas de la columna 3 con un fondo de color , y así. Es como si
RowNumber
ybOddRow
(de la solución de Catch22) prestara atención a mi grupo de columnas en lugar de ignorar eso y solo alternando con una nueva fila.Lo que quería era que todas las columnas de la fila 1 tuvieran un fondo blanco, luego todas las columnas de la fila 2 tuvieran un fondo de color, luego todas las columnas de la fila 3 tuvieran un fondo blanco, y así sucesivamente. Obtuve este efecto usando la respuesta seleccionada, pero en lugar de pasar
Nothing
aRowNumber
, pasé el nombre de mi grupo de columnas, por ejemploPensé que esto podría ser útil para otra persona.
fuente
Creo que este truco no se discute aquí. Asi que aqui esta,
En cualquier tipo de matriz compleja, cuando desea colores de celda alternativos, ya sea en fila o columna, la solución de trabajo es,
Si desea un color alternativo de las celdas, entonces,
Eso es todo.
Lo mismo para la fila de color alternativa, solo tiene que editar la solución en consecuencia.
NOTA: Aquí, a veces necesita establecer el borde de las celdas en consecuencia, generalmente desaparece.
Además, no olvide eliminar el valor 1 en el informe que apareció en la imagen cuando creó un grupo de padres falso.
fuente
Si para todo el informe necesita un color alternativo, puede usar el DataSet al que está vinculado su Tablix para un número de referencia de identidad de todo el informe en el informe y usarlo en la función RowNumber ...
fuente
La respuesta de @ Aditya es excelente, pero hay casos en los que el formato se descartará si la primera celda de la fila (para el formato de fondo de la fila) tiene un valor faltante (en tablixes complejos con grupos de columnas / filas y valores faltantes).
La solución de @Aditya aprovecha inteligentemente el
countDistinct
resultado de larunningValue
función para identificar números de fila dentro de un grupo tablix (fila). Si tiene filas de tablix con valor perdido en la primera celda,runningValue
no incrementará elcountDistinct
resultado y devolverá el número de la fila anterior (y, por lo tanto, afectará el formato de esa celda). Para tener en cuenta eso, deberá agregar un término adicional para compensar elcountDistinct
valor. Mi decisión fue verificar el primer valor en ejecución en el grupo de filas en sí (consulte la línea 3 del fragmento a continuación):Espero que esto ayude.
fuente
¿Podría alguien explicar la lógica detrás de convertir el resto de los campos en falso en el código a continuación (desde la publicación anterior)
Una cosa que noté es que ninguno de los dos métodos principales tiene noción de qué color debe ser la primera fila en un grupo; el grupo solo comenzará con el color opuesto a la última línea del grupo anterior. Quería que mis grupos siempre comenzaran con el mismo color ... la primera fila de cada grupo siempre debe ser blanca y la siguiente fila coloreada.
El concepto básico era restablecer la palanca cuando se inicia cada grupo, así que agregué un poco de código:
Ahora tengo tres tipos diferentes de fondos celulares:
Esto funciona para mi. Si desea que la fila de agrupación no tenga color o sea de un color diferente, debería ser bastante obvio a partir de esto cómo cambiarla.
No dude en agregar comentarios sobre lo que podría hacerse para mejorar este código: soy nuevo en SSRS y VB, por lo que sospecho que hay mucho margen de mejora, pero la idea básica parece sólida (y fue útil para mí) así que quería tirarlo aquí.
fuente
Probé todas estas soluciones en un Tablix agrupado con espacios de fila y ninguno funcionó en todo el informe. ¡El resultado fue filas de colores duplicados y otras soluciones resultaron en columnas alternas!
Aquí está la función que escribí que funcionó para mí usando un conteo de columnas:
Para un Tablix de 7 columnas, uso esta expresión para el color de fondo de la fila (de celdas):
fuente
Solo porque ninguna de las respuestas anteriores parecía funcionar en mi matriz, estoy publicando esto aquí:
http://reportingservicestnt.blogspot.com/2011/09/alternate-colors-in-matrixpivot-table.html
fuente
Mis datos de matriz tenían valores faltantes, por lo que no pude lograr que la solución de ahmad funcionara, pero esta solución funcionó para mí
La idea básica es crear un grupo secundario y un campo en su grupo más interno que contenga el color. Luego configure el color para cada celda de la fila en función del valor de ese campo.
fuente
Ligera modificación de otras respuestas desde aquí que funcionó para mí. Mi grupo tiene dos valores para agrupar, así que pude ponerlos a ambos en el primer argumento con un + para que se alternara correctamente
fuente
Cuando utilicé los grupos de filas y columnas, tuve un problema en el que los colores alternarían entre las columnas a pesar de que era la misma fila. Resolví esto usando una variable global que alterna solo cuando cambia la fila:
Ahora, en la primera columna de la fila que desea alternar, establezca la expresión de color en:
-
En las columnas restantes, configúrelas todas para:
Esto debería alternar los colores solo después de dibujar la primera columna.
Esto también puede mejorar (no verificable), ya que no necesita hacer un cálculo matemático para cada columna.
fuente