Скользящие периоды и нарастающие окна
Считаем показатели за «последние N месяцев» — для сглаживания и трендов.
Скользящее окно — расчёт показателя за фиксированный период, отсчитанный назад от текущей даты (например, последние 3 месяца).
Зачем нужны скользящие периоды
Месячная выручка скачет: акция, праздники, случайность. Чтобы увидеть тренд, а не шум, берут скользящее окно — например, среднюю выручку за последние 3 месяца. Каждый месяц окно «сдвигается», сглаживая колебания. Такие метрики (rolling average, last-N-months) — стандарт в аналитике продаж и трафика.
DATESINPERIOD
Главный инструмент — функция, возвращающая набор дат за период от опорной даты:
Выручка за 3 мес = CALCULATE(
[Выручка],
DATESINPERIOD( Date[Дата], MAX(Date[Дата]), -3, MONTH )
)Аргументы: столбец дат, опорная дата (берём максимальную в контексте), число периодов (-3 = три назад) и единица (MONTH). Результат — сумма за последние три месяца относительно текущей точки.
Скользящее окно «последние 3 месяца»: точка Мар → [Янв Фев Мар] точка Апр → [Фев Мар Апр] точка Май → [Мар Апр Май] окно «едет» вправо точка Июн → [Апр Май Июн]
Скользящее среднее
Чтобы сгладить тренд, окно делят на число периодов:
Среднее за 3 мес =
VAR СуммаОкна = CALCULATE( [Выручка],
DATESINPERIOD( Date[Дата], MAX(Date[Дата]), -3, MONTH ) )
RETURN
DIVIDE( СуммаОкна, 3 )На графике линия скользящего среднего идёт плавно, в отличие от «зубчатой» фактической выручки — по ней легко прочитать направление бизнеса.
Иллюстрация сглаживания
rev = [100, 150, 120, 90, 200, 180] # выручка по месяцам
window = 3
for i in range(window - 1, len(rev)):
avg = sum(rev[i - window + 1:i + 1]) / window
print("месяц", i + 1, "скользящее среднее:", round(avg, 1))Вывод:
месяц 3 скользящее среднее: 123.3 месяц 4 скользящее среднее: 120.0 месяц 5 скользящее среднее: 136.7 месяц 6 скользящее среднее: 156.7
Как работает под капотом
В каждой точке оси (месяце) функция определяет опорную дату через MAX(Date[Дата]) в текущем контексте, затем DATESINPERIOD отсчитывает назад нужное число периодов и формирует диапазон дат. CALCULATE накладывает его как фильтр, и мера считается по этому окну. Поскольку опорная дата своя в каждой точке, окно автоматически «едет» вдоль оси — отсюда эффект скольжения.
Частые ошибки
- Жёстко делить на 3 при неполном окне. В первых месяцах данных меньше трёх — среднее исказится; иногда делят на фактическое число месяцев.
- Путать накопительный итог и скользящее окно. YTD растёт с начала года, скользящее окно — фиксированной ширины и «едет».
- Брать опорную дату из фактов, а не из таблицы дат. Нарушает непрерывность и сдвигает окно.
Итог
- Скользящее окно считает показатель за последние N периодов и сглаживает колебания.
DATESINPERIODстроит диапазон от опорной даты назад; делением получают скользящее среднее.- Окно «едет» вдоль оси, потому что опорная дата своя в каждой точке.