Ежемесячная группировка ssrs

У нас есть единая таблица, которая содержит данные о заказах для всех наших клиентов. Исходя из этого, мы хотели бы создать простой отчет SSRS, который отображает данные за 12 месяцев из выбранного начального месяца (управляется параметром с 12 месяцами в раскрывающемся списке) и разделяет ежемесячные данные в один из двух столбцов отдела.

В принципе, мы хотели бы, чтобы данные отображались в отчете следующим образом:

Month   Dept1   Dept2   MonthlyTotal
Sept    100     500     600
Oct     100     200     300
Nov     200     100     300
Dec     100     300     400
Jan     0       100     100
Feb     0       0       0
Mar     0       0       0
Apr     0       0       0
May     0       0       0
June    0       0       0
July    0       0       0
Aug     0       0       0
Total   500     1200    1700

Как лучше всего этого добиться? Что мы должны использовать: объект Table или Matrix? Должны ли мы жестко закодировать в отчете 12 «месячных» строк и динамически заполнять ячейки выражениями, подобными логике?

В случае, если это повлияет на наш взгляд выше, мы также хотели бы, чтобы пользователи могли детализировать, чтобы увидеть базовые подробные записи для каждого значения.

0
0
46
1

Ответы 1

Ваш выбор использования матрицы должен основываться на том, как данные находятся в вашем наборе данных. Если для каждого отдела есть два отдельных столбца, я бы использовал таблицу с двумя полями. Если есть поле ОТДЕЛ, которое определяет, к какому отделу принадлежит запись, я бы выбрал матрицу и использовал ОТДЕЛ в качестве группы столбцов.

Ваша проблема с месяцами заключается в том, что у вас, вероятно, нет таблицы с будущими месяцами, ожидающими заполнения данными, поэтому вам нужно их сгенерировать.

Чтобы заполнить даты, я бы начал с таблицы дат, которая создается динамически. Вот что я обычно использую для создания таблицы месяцев. Вы можете привязать даты начала и окончания к своим параметрам.

DECLARE @START_DATE AS DATE = '2017-01-01' 
DECLARE @END_DATE AS DATE = '2018-08-31' 

;WITH DATE_RANGE AS (
                    SELECT CAST(@START_DATE AS DATE) AS MONTH_START
                    UNION ALL
                    SELECT CAST(DATEADD(MONTH, 1, MONTH_START) AS DATE)
                    FROM DATE_RANGE
                    WHERE YEAR(MONTH_START) < YEAR(@END_DATE)
                        OR
                        (
                            YEAR(MONTH_START) = YEAR(@END_DATE)
                            AND 
                            MONTH(MONTH_START) < MONTH(@END_DATE)
                        )
                    )


SELECT MONTH_START, MONTH_END 
INTO #DATE_RANGE
FROM DATE_RANGE

Другие вопросы по теме