Расчет ежемесячного увеличения / уменьшения продаж - PullRequest
0 голосов
/ 22 мая 2018

У нас есть таблица, в которой хранится месячный бюджет для различных клиентских сегментов:

SalesMonth | SalesYear | MonthBudget | CustomerType
    1      |   2018    | 275000      | Elite
    2      |   2018    | 300000      | Elite
    1      |   2018    | 150000      | Top
    2      |   2018    | 175000      | Top
    1      |   2018    | 50000       | Base
    2      |   2018    | 1000000     | Base
 etc..

Я хочу взять цель за предыдущие 3 месяца (всего, а не по типу клиента) и посмотреть на месяц3 месяца вперед и рассчитать увеличение / уменьшение% цели.Я могу получить это для расчета прямо сейчас (для расчета августа), но как бы я сделал это для всех месяцев года?(понимаю, что мой код статичен и не будет работать для января / февраля / марта 2018 года, но данные за 2017 год есть. У нас еще нет данных за 2019 год, поэтому я понимаю, что октябрь / ноябрь / декабрь также отключены.

with _sum as(
SELECT 
SalesMonth
,SUM([MonthBudget]) as MonthBudget
FROM [SALES].[dbo].[SALES_PLAN]
WHERE CustomerType NOT IN ('Design')
and year(dtdate) = '2018'
Group by SalesMonth
)
SELECT 
SalesMonth
,MonthBudget
,(LAG(MonthBudget,1) OVER (Order by [dtDate])+LAG(MonthBudget,2) OVER (Order     by [dtDate])+LAG(MonthBudget,3) OVER (Order by [dtDate]))/3 as Previous3AVG
,LEAD(MonthBudget,3) OVER (Order by [dtDate]) as Future3MOBudget
,(LEAD(MonthBudget,3) OVER (Order by [dtDate]))/nullif(((LAG(MonthBudget,1) OVER (Order by [dtDate])+LAG(MonthBudget,2) OVER (Order by [dtDate])+LAG(MonthBudget,3) OVER (Order by [dtDate]))/3),0) as [Change%]
   FROM [SALES].[dbo].[SALES_PLAN]

1 Ответ

0 голосов
/ 22 мая 2018

Мне было интересно узнать, почему вы используете эту строку sum([MonthBudget])/3 as Budget, когда берете данные за 5 месяцев.Но в любом случае ...

Трудно сказать с вашим объяснением данных, которые вы просматриваете, но это может быть примерно таким же, как вы ищете:

WITH _past
AS (
    SELECT SUM([MonthBudget]) / 3 AS Budget
    FROM [SALES].[dbo].[SALES_PLAN]
    WHERE CustomerType NOT IN ('Design')
        AND (
            SalesMonth > ABS(Month(GetDate()) - 3)
            AND SalesYear = CASE WHEN Month(GetDate()) - 3 < 0
                    THEN Year(GetDate()) - 1
                    ELSE Year(GetDate()) END
            )
        AND SalesMonth < Month(GetDate())
    ),
_future
AS (
    SELECT SalesMonth,
        sum([MonthBudget]) AS Budget
    FROM [SALES].[dbo].[SALES_PLAN]
    WHERE CustomerType NOT IN ('Design')
        AND SalesMonth = Month(GetDate()) + 3
        AND SalesYear = CASE WHEN Month(GetDate()) + 3 > 12
                THEN Year(GetDate()) + 1
                ELSE Year(GetDate()) END
    GROUP BY SalesMonth
    ) SalesMonth

SELECT SalesMonth,
    _past.Budget / _future.budget AS [Change%]
FROM _past
CROSS APPLY _future

Очевидно, что потребуется скорректировать все пропущенные месяцы и т. Д. Но вы, вероятно, поняли основную идею.

...