Короткий ответ
Считаю выручку и её изменение (абсолютное и в долях вклада в общее падение) в разрезе регион × канал за сравниваемые периоды, сортирую по вкладу в падение, чтобы выделить 2-3 ключевых сегмента, объясняющих большую часть эффекта.
Как это работает подробнее
полное падение выручки — это сумма изменений по всем сегментам; сегмент с большим абсолютным изменением (даже при небольшом процентном падении) может объяснять бо́льшую часть общего эффекта, чем сегмент с огромным процентным падением, но малым объёмом.
Пример кода
analysis.sql
WITH rev AS (
SELECT region, channel,
sum(amount) FILTER (WHERE quarter = 'Q3_2026') AS revenue_curr,
sum(amount) FILTER (WHERE quarter = 'Q2_2026') AS revenue_prev
FROM orders_quarterly
GROUP BY region, channel
)
SELECT region, channel,
revenue_curr, revenue_prev,
(revenue_curr - revenue_prev) AS delta,
round((revenue_curr - revenue_prev)::numeric /
nullif(sum(revenue_curr - revenue_prev) OVER (), 0), 3) AS contribution_share
FROM rev
ORDER BY contribution_share;Что использовать на практике
- На практике: считаю revenue_prev и revenue_curr по каждой паре (регион, канал), разницу delta = revenue_curr - revenue_prev, и долю вклада каждого сегмента в общее delta: contribution_share = delta_segment / total_delta. Сортирую по убыванию |contribution_share| и фокусируюсь на топ-сегментах.
- Проверка: сумма всех delta по сегментам должна равняться общему изменению выручки компании — если нет, в разрезе потеряны/задвоены строки.
Подводные камни
- Частые ошибки: фокусироваться на сегменте с наибольшим процентным падением, игнорируя его малую долю в общей выручке; не учитывать, что рост одного сегмента может маскировать более сильное падение другого при взгляде только на итог; забывать учитывать изменение состава (например, прекращение продаж в одном регионе) как отдельную причину, а не «органическое» падение.