Как посчитать Operating Margin в SQL
Содержание:
Зачем Operating Margin
Operating Margin = Operating Income / Revenue. Показывает эффективность основных операций бизнеса — без учёта процентов по долгу и налогов. Одна из центральных метрик в финансовой отчётности.
Формула
Operating Margin = (Revenue - COGS - Opex) / Revenue × 100%
= Operating Income / Revenue × 100%
Operating Income (EBIT) = Revenue - COGS - SG&A - R&D - depreciationБазовый расчёт
WITH monthly_pnl AS (
SELECT
DATE_TRUNC('month', DATE) AS month,
SUM(revenue) AS revenue,
SUM(cogs) AS cogs,
SUM(sga + r_n_d + depreciation) AS opex
FROM financial_data
WHERE DATE >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1
)
SELECT
month,
revenue,
cogs,
opex,
revenue - cogs AS gross_profit,
revenue - cogs - opex AS operating_income,
(revenue - cogs - opex)::NUMERIC * 100 / NULLIF(revenue, 0) AS operating_margin_pct
FROM monthly_pnl
ORDER BY month;Gross vs Operating vs Net
WITH pnl AS (
SELECT
SUM(revenue) AS rev,
SUM(cogs) AS cogs,
SUM(sga + r_n_d + depreciation) AS opex,
SUM(interest + taxes) AS below_line
FROM financial_data
WHERE DATE >= '2026-01-01' AND DATE < '2026-04-01'
)
SELECT
rev,
(rev - cogs) * 100.0 / rev AS gross_margin_pct,
(rev - cogs - opex) * 100.0 / rev AS operating_margin_pct,
(rev - cogs - opex - below_line) * 100.0 / rev AS net_margin_pct
FROM pnl;| Margin | Что вычитается |
|---|---|
| Gross | только COGS |
| Operating | COGS + OpEx |
| Net | COGS + OpEx + проценты + налоги |
Тренды
SELECT
DATE_TRUNC('quarter', DATE) AS quarter,
SUM(revenue - cogs - sga - r_n_d - depreciation) AS operating_income,
SUM(revenue) AS revenue,
SUM(revenue - cogs - sga - r_n_d - depreciation)::NUMERIC * 100 / NULLIF(SUM(revenue), 0) AS op_margin_pct,
-- YoY change
LAG(SUM(revenue - cogs - sga - r_n_d - depreciation)::NUMERIC * 100 / NULLIF(SUM(revenue), 0))
OVER (ORDER BY DATE_TRUNC('quarter', DATE)) AS prev_quarter_margin
FROM financial_data
WHERE DATE >= '2024-01-01'
GROUP BY 1
ORDER BY 1;По сегментам и продуктовым линиям
SELECT
product_line,
SUM(revenue) AS revenue,
SUM(revenue - direct_costs - allocated_opex)::NUMERIC * 100
/ NULLIF(SUM(revenue), 0) AS op_margin_pct
FROM segment_pnl
WHERE DATE >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY product_line
ORDER BY op_margin_pct DESC;Высокая маржа — вкладывать больше. Низкая — исправлять или закрывать направление.
Частые ошибки
Ошибка 1. Путать SG&A и OpEx. SG&A — это часть OpEx. В OpEx входят ещё амортизация, R&D и прочее.
Ошибка 2. Operating ≠ Net. Для operating margin не вычитают проценты и налоги — это частая путаница.
Ошибка 3. Разовые статьи. Реструктуризацию, выплаты по искам и прочие разовые расходы из operating margin исключают — они не повторяются.
Ошибка 4. Разная классификация затрат. В софтверных компаниях спорят, считать ли R&D операционными расходами. Единого мнения нет.
Ошибка 5. Валюта. Если P&L в нескольких валютах, приводите всё к одной по единому курсу.
Связанные темы
- Как посчитать gross margin в SQL
- Как посчитать net margin в SQL
- Как посчитать EBITDA в SQL
- Как посчитать revenue в SQL
FAQ
Какой Operating Margin ok?
Норма сильно зависит от отрасли. В SaaS 20–30% считается средним уровнем, а 40%+ — отличным. В ритейле нормальны 5–10%, в техе — 15–25%.
Operating vs EBITDA?
Operating Income — это EBIT, прибыль до вычета процентов и налогов. EBITDA прибавляет к EBIT амортизацию основных средств и нематериальных активов (EBITDA = EBIT + Depreciation + Amortization).
Negative Operating Margin?
Отрицательная operating margin означает, что компания сжигает деньги уже на уровне основных операций. Чаще всего так выглядят SaaS-компании и стартапы на ранней стадии.
Improve Operating Margin как?
Рычагов четыре: поднять цены, снизить COGS, урезать OpEx за счёт эффективности и вырасти в масштабе, поймав операционный рычаг. Обычно комбинируют сразу несколько.
По sector ranking?
Ориентировочно по отраслям: софт — от 30%, банки — от 25%, ритейл — 5–10%, авиакомпании — всего 0–5%. Разброс огромный, поэтому margin сравнивают только внутри одной отрасли.