Страницы: 1
RSS
Расчет коэффициента сезонности
 
Уважаемые форумчане, приветствую вас! Есть потребность в помощи при расчете коэффициента сезонности продаж. Имеется таблица продаж ("Операции"), в которой приведены строки ежедневных продаж за несколько лет. Коэффициент сезонности рассчитываю по следующему алгоритму:
1. Агрегатирую количество продаж за несколько лет по номеру месяца продаж.
2. Вычисляю среднее количество продаж по агрегатированным 12 месяцам.
3. Вычисляю коэффициент сезонности в помесячной разбивке, как деление агрегатированных продаж в конкретном месяце к среднему (п.2).
Код
КоэффСезонности = 
VAR EndData = CALCULATE (MAX('Операции'[Дата]),ALL())
VAR Period = 
MAXX(
    FILTER(
        '_Константы',
        '_Константы'[Константа] = "Количество периодов сезонности, лет"
    ),
    '_Константы'[Значение]
)
var StartData = EDATE(EndData,- Period*12)
VAR MonthsValues =
CALCULATETABLE(
    ADDCOLUMNS ( 
        VALUES ( '_Календарь'[№_месяца] ), 
            "@sum", 
                CALCULATE ( SUM ( 'Операции'[Количество] ) )           
                ), 
                FILTER(ALL('_Календарь'[Дата]),'_Календарь'[Дата] > StartData && '_Календарь'[Дата] <= EndData))
VAR sredZnach = 
    AVERAGEX(
            MonthsValues,
        [@sum]
    )

Первые два пункта описал в коде, а как вывести сумму агрегатированных продаж в конкретном месяце и соотнести к пункту 2 не понимаю. Буду благодарен за помощь в данном вопросе
Изменено: Sergey Chernichenko - 29.09.2022 12:15:46
 
Вроде как нашел решение. Возможно, не очень оптимальное, но работает. Выкладываю, вдруг кому пригодится:
Код
КоэффСезонности = VAR EndData = DATE(2021,12,31)
VAR Period = 
MAXX(
    FILTER(
        '_Константы',
        '_Константы'[Константа] = "Количество периодов сезонности, лет"
    ),
    '_Константы'[Значение]
)
var StartData = EDATE(EndData,- Period*12)
VAR MonthsValues = 
CALCULATETABLE(
    ADDCOLUMNS ( 
        VALUES ( '_Календарь'[№_месяца] ), 
            "@sum", 
                CALCULATE ( SUM ( 'Операции'[Количество] ) )           
                ), 
                FILTER(ALL('_Календарь'[Дата]),'_Календарь'[Дата] > StartData && '_Календарь'[Дата] <= EndData))
VAR sredZnach = 
    AVERAGEX(
            MonthsValues,
        [@sum]
    )   
VAR OperMonth = 
   CALCULATE(
       SUM('Операции'[Количество]),
            ALLEXCEPT('_Календарь','_Календарь'[№_месяца]),
                        FILTER('_Календарь','_Календарь'[Дата] > StartData && '_Календарь'[Дата] <= EndData)
            )
var KoeffSezon = 
        DIVIDE(OperMonth, sredZnach)
    return
KoeffSezon
Страницы: 1
Наверх