Si deseas usar una misma paleta de colores para los gráficos, para que los colores sean consistentes, la forma común de hacerlo es aplicar la misma paleta de colores a cada gráfico.
Si usas las paletas de colores predefinidos, no tendrías mayores problemas, sin embargo, para aquellos que queremos usar una paleta personalizada, puede ser un problema, configurar en cada grafico y volver a crear la misma paleta de colores personalizada, una y otra vez. Con el consiguiente problema de que si deseas cambiar la paleta, debes ir nuevamente a configurarlo.
Una forma que se tiene de solventar este probema es creando un snippet en la parte del código del reporte. En este enlace pueden encontrar mas detalles: Specify Consistent Colors across Multiple Shape Charts (Report Builder and SSRS).
La ventaja que provee es que la paleta de colores se mantiene en un solo lugar y facilita las modificaciones y con el mínimo esfuerzo permite reusar este misma paleta en otros reportes.
Private colorPalette As String() = {"Color1", "Color2", "Color3", "Color4", "Color5", "Color6"}<span id="mce_SELREST_start" style="overflow:hidden;line-height:0;"></span>
Private count As Integer = 0
Private mapping As New System.Collections.Hashtable()
Public Function GetColor(ByVal groupingValue As String) As String
If mapping.ContainsKey(groupingValue) Then
Return mapping(groupingValue)
End If
Dim c As String = colorPalette(count Mod colorPalette.Length)
count = count + 1
mapping.Add(groupingValue, c)
Return c
End Function
El codigo mencionado en el enlace, funciona bien y está basado en una tabla de hash para que los valores iguales muestren el mismo color.
Habemos algunos que requerimos que los colores se reinicien por cada gráfico, para que vuelva a empezar por el color1. Para ello, modifique ligeramente el código anterior y adaptarlo del siguiente modo:
Private colorPalette As String() = {"Color1", "Color2", "Color3", "Color4", "Color5", "Color6"}
Private groupConsolidate As New System.Collections.Hashtable()
Private Function GetColorValue(ByRef hashValues As System.Collections.Hashtable, ByVal groupingValue As String) As String
If hashValues.ContainsKey(groupingValue) Then
Return hashValues(groupingValue)
End If
Dim c As String = colorPalette(hashValues.Count Mod colorPalette.Length)
hashValues.Add(groupingValue, c)
Return c
End Function
Public Function GetColor(ByVal groupValue As String, ByVal groupingValue As String) As String
If groupConsolidate.ContainsKey(groupValue) Then
Return GetColorValue(groupConsolidate(groupValue), groupingValue)
End If
groupConsolidate.Add(groupValue, New System.Collections.Hashtable())
Return GetColorValue(groupConsolidate(groupValue), groupingValue)
End Function
La forma de usarlo es similar. Se agrega un identificador al inicio que represente el nombre de la gráfica o el agrupador de las series.
=Code.GetColor("NombreGrafica",Fields!MyCategoryField.Value)