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 text alt (imagen original: http://img577.imageshack.us/img577/9616/area.jpg )

y un gráfico de la columna text alt (imagen original: http://img577.imageshack.us/img577/7590/column.jpg )

debería explicar el problema.

¿Alguien sabe cómo resolver este problema? Gracias!

¿Fue útil?

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:

  1. 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 .

  2. 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, utilice OUTER APPLY entre el CTE y el dbo.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 .

  3. 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

  4. 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:

1

Captura de pantalla # 2:

2

Captura de pantalla # 3:

3

Captura de pantalla # 4:

4

Captura de pantalla # 5:

5

Captura de pantalla # 6:

6

Captura de pantalla # 7:

7

Captura de pantalla # 8:

8

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top