gráfico de líneas SSRS: eje x escala de tiempo con lagunas en los datos
-
10-10-2019 - |
Pregunta
Tengo un conjunto de datos que cuenta el número de palets producidos por hora, por ejemplo
11/11/2010 22:00 -> 22
11/11/2010 23:00 -> 12
11/12/2010 00:00 -> 18
11/12/2010 01:00 -> 19
11/12/2010 03:00 -> 20
Como se puede observar, existe una brecha 1:00-3:00 ya que no hay datos para esa hora. Estos datos se visualiza en SSRS 2005 utilizando un gráfico con una escala de tiempo del eje x. Cuando el tipo de gráfico es 'columna', no hay ningún problema en absoluto desde 02:00 obtiene visualizado con no (0) de valor y la brecha es bien visible en el gráfico. Cuando el tipo de gráfico es 'Line' o 'zona', 02:00 se visualiza en el gráfico también, pero sin 0 valor: hay una línea de conexión entre el valor de 01:00 y 03:00. Al mirar para el gráfico de línea, se podría concluir que existía una producción a las 02:00, pero esto no es cierto, es sólo la línea que conecta el valor de 01:00 con el valor de las 03:00.
Ejemplo de los mismos datos en un área del gráfico (imagen original: http://img577.imageshack.us/img577/9616/area.jpg )
y un gráfico de la columna (imagen original: http://img577.imageshack.us/img577/7590/column.jpg )
debería explicar el problema.
¿Alguien sabe cómo resolver este problema? Gracias!
Solución
Probablemente, usted ha encontrado una respuesta a su pregunta ahora. Esto es para otros que podrían tropezar con esta pregunta. Esta solución sólo es aplicable si está utilizando SQL Server 2005 or above
como la fuente de datos para los informes. Los usos de ejemplo Common Table Expressions (CTE)
para lograr los resultados deseados mencionados en la pregunta. El ejemplo se menciona a continuación usos SSRS 2005
y base de datos SQL Server 2008 R2
. CTEs se admiten en SQL Server 2005 or above
.
Paso a paso proceso:
-
Crea una tabla llamada
dbo.TimeScaleData
y rellenar con los datos proporcionados en la pregunta. Consulte pantalla # 1 . Crear secuencias de comandos de la tabla se proporcionan bajo Scripts SQL . -
Crear un CTE que se llevará a los valores máximo y mínimo y fecha en el
dbo.TimeScaleData
mesa y generar todos los valores de tiempo para cada hora entre el rango dado. A continuación, utiliceOUTER APPLY
entre el CTE y eldbo.TimeScaleData
mesa para recuperar los datos. Cualquier rango de tiempo que no tiene un registro coincidente se le asignará el valor 0. Consulte pantalla # 2 . Esta consulta se utilizará en el RESS informes para crear el conjunto de datos. Se proporciona la consulta de conjunto de datos de SSRS . -
Captura de pantalla # 3 muestra que la consulta de CTE está siendo utilizado para crear el conjunto de datos de informe. Capturas de pantalla # 4 -. # 7 muestra cómo el control Chart está configurado para utilizar el conjunto de datos
-
Captura de pantalla # 8 muestra la salida del informe en contra de los datos en la tabla de SQL Server.
Espero que ayude.
Scripts SQL:
CREATE TABLE [dbo].[TimeScaleData](
[Id] [int] IDENTITY(1,1) NOT NULL,
[DateTimeValue] [datetime] NULL,
[PalletsProduced] [int] NULL,
CONSTRAINT [PK_TimeScaleData] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
SSRS conjunto de datos de consulta:
DECLARE @StartDateTime AS DATETIME;
DECLARE @EndDateTime AS DATETIME;
SELECT @StartDateTime = MIN(DateTimeValue)
, @EndDateTime = MAX(DateTimeValue)
FROM dbo.TimeScaleData;
WITH CTE(DateTimeRange) AS
(
SELECT @StartDateTime AS DateTimeRange
UNION ALL
SELECT DATEADD(HOUR, 1, DateTimeRange)
FROM CTE
WHERE DATEADD(HOUR, 1, DateTimeRange) <= @EndDateTime
)
SELECT CTE.DateTimeRange
, COALESCE(TSD.PalletsProduced, 0) AS PalletsProduced
FROM CTE
OUTER APPLY (
SELECT PalletsProduced
FROM dbo.TimeScaleData TSD
WHERE TSD.DateTimeValue = CTE.DateTimeRange
) TSD;
Captura de pantalla # 1:
Captura de pantalla # 2:
Captura de pantalla # 3:
Captura de pantalla # 4:
Captura de pantalla # 5:
Captura de pantalla # 6:
Captura de pantalla # 7:
Captura de pantalla # 8: