Во-первых, измените ваш запрос SQL, чтобы выполнить это объединение в SSRS.Вы также можете сделать это в SSRS, но я предпочитаю делать это в SQL.Кроме того, я удалил использование зарезервированных слов в псевдонимах (что является плохой практикой):
with cte
(Transactions, Supplier, CalendarMonth, CalendarYear)
as (
select distinct
count([Status])
, sender
, left(datename(mm, Date_Reported), 3)
, right(datename(yyyy, Date_Reported), 2)
from TX
where
Date_Reported between
dateadd(
month
, -13
, cast(dateadd(month, DATEDIFF(month, -1, getdate()) - 2, 0) as date)
)
and cast(dateadd(ss, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0)) as date)
group by
datename(mm, Date_Reported)
, datename(yyyy, Date_Reported)
, sender
)
select Supplier
, Transactions
, CalendarMonth
, CalendarYear
, concat(CalendarMonth, ' ', CalendarYear) as ReportedMonth
from cte
order by
CalendarYear
, CalendarMonth asc;
В SSRS вам необходимо использовать этот запрос в качестве источника набора данных:
Затем вам необходимо создать матрикс в соответствии с рисунком ниже.Обратите внимание на группировку столбцов в ReportedMonth:
Столбцы «Среднее» и «Общее» должны создаваться вне группировок столбцов.Ниже приведены выражения для них, поэтому вы рассчитываете средние / итоговые значения в SSRS:
Дайте мне знать, как это происходит.Проблема с решением SQL состоит в том, что вам придется использовать pivot
, что означает, что вам придется жестко кодировать значения месяца в pivot
или генерировать сводную таблицу, используя динамический sql (не рекомендуется).Это значительно упрощает операции в SQL и SSRS, и ваш отчет будет динамически обновляться за последние 13 месяцев.
Дайте мне знать, как вы справляетесь.Также, пожалуйста, пометьте этот вопрос с помощью ssrs.
PS: Вы уверены, что хотите использовать скользящее среднее за последние 13 месяцев от getdate()
?Вы получите довольно забавные средние значения, когда будете на полпути в течение месяца.Подумайте о пересмотре вашего sql в среднем за предыдущие 13 полных месяцев.