2016-06-20 4 views
2

Как я могу рассчитать изменение Год \ Месяц за год \ Месяц за последние 4 года, когда Год и месяц в группе в SSRS. мне нужно так: enter image description here Row 2016 против 2015% Изменение является подразделением января 2016 Премиум/январь 2015 Премиум и так далееКак выполнить разделение с несколькими условиями в группе SSRS

enter image description here

Что-то вроде случая, когда год = 2016 и месяц = ​​1, то 2016 премия/2015 премиум Я пытаюсь:

IIF(Fields!YearNum.Value=2016 and Fields!MonthNum.Value=1, Fields.Premium.Value/IIF(Fields!YearNum.Value=2015 and Fields!MonthNum.Value=1,Fields.Premium.Value,1),Nothing) 

Мой запрос выглядит следующим образом:

SELECT b.YearNum, 
     b.MonthNum, 
     b.MonthName, 
     SUM(Premium) as Premium, 
     ISNULL(sum(case when TransactionType IN ('Policy', 'Reinstatement') then 1 ELSE 0 END),0) as Bound, 
FROM tblCalendar b 
        LEFT JOIN Test_Plaza_ProductionReport a ON b.MonthNum = MONTH(a.EffectiveDate) AND b.YearNum=YEAR(a.EffectiveDate) 
WHERE YEAR(EffectiveDate) <> 2017 
GROUP BY b.YearNum, 
      b.MonthNum, 
      b.MonthName 

enter image description here

+0

Вы были в состоянии решить это? – bwyn

ответ

0

Установка:

Чтобы имитировать вашу установку, я вручную создал следующую таблицу (dbo.Unpivoted):

Initial Data

Pivot запросы:

Далее, я поворачиваю d данные, чтобы получить следующий результат:

Pivoted Data

SELECT [Year] AS [Year], [January], [February] 
FROM 
(SELECT * FROM dbo.Unpivoted) src 
PIVOT 
(
Sum(src.Premium) 
FOR src.[Month] IN ("January", "February") 
) as PivotTable 
ORDER BY [Year] DESC; 

автообъединение запрос:

На основании приведенных выше результатов (теперь называется dbo.Premium), я использовал само- присоединиться для расчета год за годом процентное увеличение:

Results

Select Cast(upyear.[Year] as varchar) + ' vs ' + Cast(downyear.[Year] as varchar) + ' % Change' [Year],(upyear.January/downyear.January - 1) January, (upyear.February/downyear.February - 1) February 
From dbo.Premium upyear 
INNER JOIN 
dbo.Premium downyear 
ON upyear.[Year] = downyear.[Year] + 1; 

Update: Комбинированный запрос

CREATE TABLE #Combined([Year] VARCHAR(50), January FLOAT, February FLOAT) 

INSERT INTO #Combined SELECT CAST([Year] AS varchar) AS [Year], [January], [February] 
FROM 
(SELECT * FROM dbo.Unpivoted) src 
PIVOT 
(
Sum(src.Premium) 
FOR src.[Month] IN ("January", "February") 
) as PivotTable; 

INSERT INTO #Combined SELECT CAST(upyear.[Year] AS VARCHAR) + ' vs ' + CAST(downyear.[Year] as VARCHAR) + ' % Change' [Year],(upyear.January/downyear.January - 1) January, (upyear.February/downyear.February - 1) February 
From 
#Combined upyear 
INNER JOIN 
#Combined downyear 
ON upyear.[Year] = downyear.[Year] + 1; 

SELECT * FROM #Combined 
ORDER BY 
    CASE 
     WHEN LEN([Year]) = 4 THEN 1 
     ELSE 0 
    END DESC, 
    [Year] DESC; 

Begin 
    Drop Table #Combined 
End 
+0

Спасибо, он работает. Но теперь, как я могу присоединиться к мультипликаторам cte, чтобы сделать это как на первой бумаге? – Oleg

0

, кажется, вы используете матрицу, так что вам не нужно указывать месяц попробовать выражение как:

=(sum(IIF(Fields!YearNum.Value=2016, Fields.Premium.Value,0)) - sum(IIF(Fields!YearNum.Value=2015, Fields.Premium.Value,0))) 
/sum(IIF(Fields!YearNum.Value=2016, Fields.Premium.Value,0)) 
Смежные вопросы