Добавление столбцов среднего и общего - PullRequest
0 голосов
/ 07 июня 2018

У меня есть этот запрос ниже:

SELECT distinct COUNT(Status) AS [Transactions], sender AS [Supplier],
left(DATENAME(mm, Date_Reported), 3) AS Month, DATENAME(yyyy, Date_Reported) AS Year
 FROM TX
 where Date_Reported >= DATEADD(MONTH, -13, CAST(GETDATE() AS DATE))
GROUP BY DATENAME(mm, Date_Reported), DATENAME(yyyy, Date_Reported), sender
ORDER BY sender, Year, Month DESC;

Это дает мне таблицу, как показано ниже:

TX | Supplier | Month | Year

Я хотел бы добавить два дополнительных столбца: среднее значение за последние 13месяцев (то есть 17 мая - 18 мая), а также итоговые данные за последние 13 месяцев, поэтому итоговая таблица должна выглядеть следующим образом:

Supplier | May 17 | Jun 17 | Jul 17 ... | May 18 | Average | Total

Есть идеи, как я могу сделать это возможным с помощью одного большого запроса?

1 Ответ

0 голосов
/ 07 июня 2018

Во-первых, измените ваш запрос 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 вам необходимо использовать этот запрос в качестве источника набора данных:

enter image description here

Затем вам необходимо создать матрикс в соответствии с рисунком ниже.Обратите внимание на группировку столбцов в ReportedMonth: enter image description here

Столбцы «Среднее» и «Общее» должны создаваться вне группировок столбцов.Ниже приведены выражения для них, поэтому вы рассчитываете средние / итоговые значения в SSRS:

enter image description here

enter image description here

Дайте мне знать, как это происходит.Проблема с решением SQL состоит в том, что вам придется использовать pivot, что означает, что вам придется жестко кодировать значения месяца в pivot или генерировать сводную таблицу, используя динамический sql (не рекомендуется).Это значительно упрощает операции в SQL и SSRS, и ваш отчет будет динамически обновляться за последние 13 месяцев.

Дайте мне знать, как вы справляетесь.Также, пожалуйста, пометьте этот вопрос с помощью ssrs.

PS: Вы уверены, что хотите использовать скользящее среднее за последние 13 месяцев от getdate()?Вы получите довольно забавные средние значения, когда будете на полпути в течение месяца.Подумайте о пересмотре вашего sql в среднем за предыдущие 13 полных месяцев.

...