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

und eine Spalte Grafik alt text (Originalbild: http://img577.imageshack.us/img577/7590/column.jpg )

sollte das Problem erklären.

Wer weiß, wie dieses Problem zu lösen? Vielen Dank!

War es hilfreich?

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:

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

  2. 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 verwenden OUTER APPLY zwischen dem CTE und der Tabelle dbo.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 .

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

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

1

Screenshot # 2:

2

Screenshot # 3:

3

Screenshot # 4:

4

Screenshot # 5:

5

Screenshot # 6:

6

Screenshot # 7:

7

Screenshot # 8:

8

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top