График линейки SSRS: оси X-масштаб с пробелами в данных

StackOverflow https://stackoverflow.com/questions/4184627

  •  10-10-2019
  •  | 
  •  

Вопрос

У меня есть набор данных, который подсчитывает количество полученных поддонов в час, например,

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

Как вы можете заметить, между 01:00 и 03:00 существует разрыв, так как нет данных за этот час. Эти данные визуализируются в SSRS 2005 с использованием графика с оси X-оси. Когда тип графа является «столбцом», нет проблем, так как 02:00 визуализируется без (0) значения, а разрыв хорошо видна на графике. Когда тип графа является «строкой» или «областью», 02:00 визуализируется на графике, но с значением № 0: между значением 01:00 и 03:00 существует линия соединения. Если посмотреть на график линии, можно сделать вывод, что в 02:00 было производство, но это не так, только линия соединяет значение 01:00 со значением 03:00.

Пример тех же данных на графике области alt text(исходное изображение: http://img577.imageshack.us/img577/9616/area.jpg)

и график столбца alt text(исходное изображение: http://img577.imageshack.us/img577/7590/column.jpg)

должен объяснить проблему.

Кто -нибудь знает, как решить эту проблему? Благодарю вас!

Это было полезно?

Решение

Возможно, сейчас вы нашли ответ на свой вопрос. Это для тех, кто может наткнуться на этот вопрос. Это решение применимо, только если вы используете SQL Server 2005 or above в качестве источника данных для отчетов. Пример использует Common Table Expressions (CTE) Чтобы достичь желаемых результатов, упомянутых в вопросе. Пример, упомянутый ниже, использует SSRS 2005 а также SQL Server 2008 R2 база данных. CTE поддерживаются в SQL Server 2005 or above.

Пошаговый процесс:

  1. Создайте таблицу с именем dbo.TimeScaleData и заполняется данными, представленными в вопросе. Обратитесь к скриншоту #1. Анкет Создать сценарии таблицы представлены под Скрипты SQL раздел.

  2. Создайте CTE, который займет минимальные и максимальные значения даты в таблице dbo.TimeScaleData и генерируйте все временные значения на каждый час между данным диапазоном. Затем используйте OUTER APPLY между CTE и таблицей dbo.TimeScaleData Чтобы получить данные. Любой диапазон времени, у которого нет соответствующей записи, будет назначено значение 0. См. Скриншот #2. Анкет Этот запрос будет использоваться в отчете SSRS для создания набора данных. Запрос предоставлен Запрос набора данных SSRS раздел.

  3. Скриншот #3 Показывает, что запрос CTE используется для создания набора данных отчета. Скриншоты #4 - #7 Показывает, как настроен управление диаграммой для использования набора данных.

  4. Скриншот #8 Показывает вывод отчета против данных в таблице SQL Server.

Надеюсь, это поможет.

Сценарии 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:

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;

Скриншот № 1:

1

Скриншот № 2:

2

Скриншот № 3:

3

Скриншот № 4:

4

Скриншот № 5:

5

Скриншот № 6:

6

Скриншот № 7:

7

Скриншот № 8:

8

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top