Я хотел бы отобразить текущий месяц, год до даты и предыдущий год до даты в ssrs

#sql #reporting-services

#sql #службы отчетов

Вопрос:

Представление данных

Хотел бы рассчитать год до даты и предыдущий год до даты текущего месяца в представлении sql, чтобы просто представить данные в ssrs, чтобы ускорить его работу. Есть ли способ написать представление, которое может это выполнить?

Ответ №1:

Игнорируя тот факт, что я думаю, что у вас есть некоторые ошибки в ваших предыдущих сводных числах с начала года..

Я воссоздал данные в соответствии с вашим примером

 CREATE TABLE #t (TransDate date, Customer varchar(30), Amount float)

INSERT INTO #t VALUES
('2020-09-21', 'Customer 1', 200),
('2020-09-22', 'Customer 2', 300),
('2020-08-03', 'Customer 2', 450),
('2020-08-04', 'Customer 1', 1200),
('2019-09-14', 'Customer 1', 859),
('2019-02-05', 'Customer 2', 230),
('2019-07-26', 'Customer 2', 910),
('2019-11-17', 'Customer 1', 820)
  

Затем следующий оператор выдаст то, что вам нужно. Это НЕ самый элегантный способ сделать это, но он легко преобразуется в представление, и это все, что я мог придумать за то время, которое у меня было.

 SELECT 
    m.Customer
    , m.MTD as [Current Month]
    , y.YTD as [Current YTD]
    , p.YTD as [Previous YTD]
FROM (
        SELECT Customer, Yr = Year(TransDate), Mn = MONTH(TransDate), MTD = SUM(Amount) FROM #t t WHERE MONTH(TransDate) = MONTH(GetDate()) and YEAR(TransDate) = YEAR(GetDate())
            GROUP by Customer, YEAR(TransDate), MONTH(TransDate)
    ) m 
    JOIN (SELECT Customer, Yr = YEAR(TransDate), YTD = SUM(Amount) FROM #t t  GROUP by Customer,  YEAR(TransDate)) y on m.Customer =y.Customer and m.Yr = y.Yr
    JOIN (SELECT Customer, Yr = YEAR(TransDate), YTD = SUM(Amount) FROM #t t  GROUP by Customer,  YEAR(TransDate)) p on y.Customer =p.Customer and y.Yr = p.Yr   1
  

Это дает следующие результаты (которые не соответствуют вашему примеру, но я думаю, что ваш образец неверен)

введите описание изображения здесь