SSRS graphique linéaire: axe x échelle de temps avec des intervalles de données
-
10-10-2019 - |
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 (image originale: http://img577.imageshack.us/img577/9616/area.jpg )
et un graphique colonne (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!
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:
-
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 . -
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 ensuiteOUTER APPLY
entre le CTE et la tabledbo.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 . -
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
-
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:
Capture d'écran # 2:
Capture d'écran # 3:
Capture d'écran # 4:
Capture d'écran # 5:
Capture d'écran # 6:
Capture d'écran # 7:
Capture d'écran # 8: