Ежемесячная группировка SSRS - PullRequest
0 голосов
/ 13 сентября 2018

У нас есть одна таблица, которая содержит данные о заказах для всех наших клиентов. Исходя из этого, мы хотели бы создать простой отчет 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

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

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

1 Ответ

0 голосов
/ 13 сентября 2018

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

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

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...