Question

J'ai un ensemble de données qui compte le nombre de palettes produites par heure, par exemple

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

Comme vous pouvez le remarquer, il y a un écart 1:00-3:00 car il n'y a pas de données pour cette heure. Ces données se visualisé dans SSRS 2005 à l'aide d'un graphique avec une échelle de temps l'axe x. Lorsque le type de graphique est « colonne », il n'y a pas de problème du tout depuis 02h00 obtient visualisé sans (0) la valeur et l'écart est bien visible sur le graphique. Lorsque le type de graphique est « Line » ou « Zone », 02h00 est visualisée sur le graphique aussi bien, mais sans valeur 0: il y a une ligne de connexion entre la valeur de 01h00 et 03h00. Lorsque l'on regarde le graphique de la ligne, on pourrait conclure qu'il y avait la production à 02h00, mais ce n'est pas vrai, il est juste la ligne qui relie la valeur de 01h00 avec la valeur de 03h00.

Exemple des mêmes données dans un graphique Zone text alt (image originale: http://img577.imageshack.us/img577/9616/area.jpg )

et un graphique colonne text alt (image originale: http://img577.imageshack.us/img577/7590/column.jpg )

devrait expliquer le problème.

Quelqu'un sait comment résoudre ce problème? Merci!

Était-ce utile?

La solution

Probablement, vous avez trouvé une réponse à votre question. Ceci est pour d'autres qui pourraient tomber par hasard sur cette question. Cette solution est applicable uniquement si vous utilisez SQL Server 2005 or above comme source de données pour les rapports. L'exemple utilise Common Table Expressions (CTE) pour atteindre les résultats escomptés mentionnés dans la question. L'exemple mentionné ci-dessous et utilisations SSRS 2005 base de données SQL Server 2008 R2. CTEs sont pris en charge dans SQL Server 2005 or above.

processus étape par étape:

  1. Créer une table nommée dbo.TimeScaleData et remplir avec les données fournies dans la question. Reportez-vous capture d'écran # 1 . Création de scripts de la table est fournie sous Scripts SQL .

  2. Créer un CTE qui prendra les valeurs minimales et maximales de date dans le tableau dbo.TimeScaleData et générer toutes les valeurs de temps pour toutes les heures entre la plage donnée. Utilisez ensuite OUTER APPLY entre le CTE et la table dbo.TimeScaleData pour récupérer les données. Toute plage de temps qui ne dispose pas d'un enregistrement correspondant sera attribué la valeur 0. Référez capture d'écran # 2 . Cette requête sera utilisée dans le SSRS rapport pour créer l'ensemble de données. La requête est disponible SSRS DataSet Query .

  3. Capture d'écran # 3 indique que la requête CTE est utilisé pour créer le jeu de données de rapport. Captures d'écran # 4 -. # 7 montre comment le contrôle du graphique est configuré pour utiliser l'ensemble de données

  4. Capture d'écran # 8 montre la sortie du rapport sur les données dans le tableau SQL Server.

L'espoir qui aide.

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 DataSet Requête:

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;

Capture d'écran # 1:

1

Capture d'écran # 2:

2

Capture d'écran # 3:

3

Capture d'écran # 4:

4

Capture d'écran # 5:

5

Capture d'écran # 6:

6

Capture d'écran # 7:

7

Capture d'écran # 8:

8

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top