2011-11-28 10 views
8

He visto alto y bajo y parece que no puedo encontrar una respuesta a lo que parece ser un problema bastante sencillo (creo).Gráfico de líneas de SSRS que no conecta los puntos de datos

Tengo un gráfico de líneas donde hay datos en varios puntos de una serie, pero solo un conjunto de puntos se vinculan.

¿Alguien sabe por qué es esto? ¿Tiene que ver con mis datos? Si es así, estoy luchando para ver cualquier relación en los datos que pueda explicar este comportamiento.

Esto es lo que quiero decir:

Messed up data points

Como se puede ver, los diamantes rojos se deben conectando - lo mismo podría decirse de los cuadrados azules y los triángulos de color azul oscuro. ¿Alguna idea?

Disculpas si mis colores son incorrectos - Soy daltónico.

Respuesta

16

Bien, así que resolví esto.

En primer lugar, para que las líneas se unan, debe establecer el color EmptyPoint para la serie.

  1. seleccione su serie en el gráfico
  2. En la ficha de propiedades (no el cuadro de diálogo) profundizar en la propiedad EmptyPoint y establecer el color a Negro

Esto hará que ellos unirse - ¡Hurra! Pero parte de la línea es color y la otra parte es negra, ¿verdad? Eso es un poco tonto, sobre todo si se considera que si se deja el color en Automático en EmptyPoint, será transparente.

Entonces, entonces tenemos que sincronizar la serie y los colores de EmptyPoint. Usando código de here. Agregué un código al código del informe.

1). Haga clic con el botón derecho en un espacio vacío en el informe y seleccione "Propiedades del informe"
2). En la pestaña de código, pegue el siguiente:

Private colorPalette As String() = {"#418CF0", "#FCB441", "#E0400A", "#05642E", "#1A3B69", "#BFBFBF", "#E0400A", "#FCB441", "DarkBlue", "Tomato", "Orange", "CornflowerBlue", "Gold", "Red", "Green", "LightBlue", "Lime", "Maroon", "LightSteelBlue", "Tan", "Silver"} 
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 

entonces tenemos que llamar a este código cuando se configura el color de la serie y de la EmptyPoint.

  1. seleccionar la serie de
  2. En la pestaña Propiedades de pasta algo lo siguiente (reemplace WhateverTheGroupIsForYourSeries con su nombre de grupo de series): =Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)
  3. taladro hasta el elemento de color de la propiedad EmptyPoint Serie
  4. Pegue el mismo texto desde el punto dos [por ej. =Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)]

¡Y listo! ¡Terminaste! No puedo creer lo innecesariamente difícil que es esto: D

+0

Todo funcionó bien hasta que intenté con los pasos 2 y 4. El problema está en acceder a la función GetColor. Parece que el código escrito en las propiedades del informe que definen la función GetColor no está accesible aquí en el elemento de color. Alguna idea de cómo resolver esto. Estoy usando RDLC y no el RDL que está en los servicios de informes. – learner

+0

¡Descubrí mi error! El nombre de la serie que proporcioné tenía un error tipográfico. Tu solución funcionó. Gracias. El único problema que veo ahora es que el color de las leyendas está en mal estado. Hay más de una aparición del mismo color. – learner

+0

Estaba usando CountRows() para mi valor Y, que me dio la ilusión de puntos vacíos, pero eran puntos reales con un valor de cero. Para evitar eso, cambié mi valor Y a = IIF (CountRows()> 0, CountRows(), Nothing) – Towler

1

Acabo de tener un problema donde mostraba marcadores pero no las líneas.Terminé resolviéndolo envolviendo la expresión en un CInt() para convertirlo en un entero.

+0

¿Podría explicar esto un poco más con un ejemplo de código? Estoy interesado en probar esta solución. –

+0

Esta solución funcionó perfectamente para mí. Elija el campo de valores de gráfico, haga clic en la flecha y elija Expresión, y luego ajuste lo que esté allí con CINT ([su expresión]). Gracias SteveCav – MrsTapp

0

Otra forma de manejar esto es hacer una selección recursiva (si tiene conjuntos de datos muy grandes no lo hacen, se mata el rendimiento). Por lo que podría hacer que el conjunto de datos:

SELECT *, ROW_NUMBER() over(partition by Store order by Date desc) as rn 
FROM StorePerformance 

Ahora usted puede tener su grupo se rn categoría (que debe agrupar por RN y ordenar por RN) Fecha pero selecto de su etiqueta. Esto aún mostrará la fecha en su eje x, pero como usted está agrupando por rn, los datos seguirán siendo continuos y todas las líneas se conectarán. También tu leyenda aún coincidirá.

Todavía no he analizado en profundidad cuánto cambian los puntos de datos ya que estamos trazando con el número de fila y la fecha de visualización, pero si se trata principalmente de visualizar tendencias en las líneas y no se preocupan por dónde están en un punto dado en el tiempo en relación el uno con el otro, te servirá muy bien. De lo contrario, dejaría el cuadro como está y solo leería los puntos de la trama, que todavía son datos válidos.

Cuestiones relacionadas