SSRS Liniendiagramm: x-Achse der Zeit-Skala mit Lücken in den Daten
-
10-10-2019 - |
Frage
Ich habe einen Datensatz, der die Anzahl der produzierten Paletten pro Stunde zählt, zB
11.11.2010 22:00 -> 22
11.11.2010 23.00 Uhr -> 12
11.12.2010 00:00 -> 18
11.12.2010 01:00 -> 19
11.12.2010 03:00 -> 20
Wie Sie sehen können, gibt es eine Lücke von 1.00 Uhr bis 03.00 Uhr, da es keine Daten für diese Stunde. Diese Daten werden in SSRS 2005 mit einem Diagramm mit einer Zeitskala x-Achse visualisiert. Wenn der Diagrammtyp ‚Spalte‘ ist, gibt es kein Problem, da 02.00 ohne (0) Wert sichtbar gemacht wird und die Lücke ist in der Grafik gut sichtbar. Wenn der Diagrammtyp ‚Line‘ oder ‚Fläche‘ ist, 02:00 wird auch in der Grafik sichtbar gemacht, aber ohne 0 Wert: Es gibt eine Verbindungsleitung zwischen dem Wert von 01:00 bis 03:00 Uhr. Wenn Sie mit dem Liniendiagramm suchen, könnte man schließen, dass es die Produktion um 02:00 Uhr war, aber das ist nicht wahr, es ist nur die Linie, die den Wert von 01.00 mit dem Wert von 03.00 verbindet.
Beispiel für die gleichen Daten in einem Bereich Graph (Originalbild: http://img577.imageshack.us/img577/9616/area.jpg )
und eine Spalte Grafik (Originalbild: http://img577.imageshack.us/img577/7590/column.jpg )
sollte das Problem erklären.
Wer weiß, wie dieses Problem zu lösen? Vielen Dank!
Lösung
Wahrscheinlich haben Sie eine Antwort auf Ihre Frage ist nun gefunden. Dies ist für andere, die auf diese Frage stolpern könnten. Diese Lösung ist nur anwendbar, wenn Sie mit SQL Server 2005 or above
als Datenquelle für die Berichte. Das Beispiel verwendet Common Table Expressions (CTE)
die gewünschten Ergebnisse in der Frage erwähnt zu erreichen. Das folgende Beispiel verwendet SSRS 2005
und SQL Server 2008 R2
Datenbank erwähnt. CTEs werden in SQL Server 2005 or above
unterstützt.
Schritt-für-Schritt-Prozess:
-
Erstellen Sie eine Tabelle mit dem Namen
dbo.TimeScaleData
und Bestücken mit den in der Frage zur Verfügung gestellten Daten. Siehe Screenshot # 1 . Erstellen Skripte der Tabelle vorgesehen ist unter SQL Scripts . -
Erstellen Sie einen CTE, der die minimalen und maximalen Datumswerte in der Tabelle
dbo.TimeScaleData
nehmen und alle die Zeitwerte für jede Stunde zwischen dem gegebenen Bereich erzeugen. Dann verwendenOUTER APPLY
zwischen dem CTE und der Tabelledbo.TimeScaleData
, um die Daten zu holen. Alle Zeitbereich, die keinen passenden Datensatz existiert, wird der Wert zugewiesen wird 0. Siehe Screenshot # 2 . Diese Abfrage wird in den SSRS verwendet werden, berichten den Datensatz zu erstellen. Die Abfrage wird zur Verfügung gestellt SSRS Datasetabfrage . -
Screenshot # 3 zeigt, dass die CTE-Abfrage verwendet wird, um den Report-Datensatz zu erstellen. Screenshots # 4 -. # 7 zeigt, wie das Chart-Steuerelement konfiguriert ist, den Datensatz zu verwenden,
-
Screenshot # 8 zeigt die Report-Ausgabe gegen die Daten in SQL Server-Tabelle.
Ich hoffe, das hilft.
SQL-Skripts:
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 Datasetabfrage:
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;
Screenshot # 1:
Screenshot # 2:
Screenshot # 3:
Screenshot # 4:
Screenshot # 5:
Screenshot # 6:
Screenshot # 7:
Screenshot # 8: