25 SQL-шпаргалок помогают оценить бизнес и собрать дэшборд. Разбираем продажи, ассортимент, клиентов и сбои. Основатель «Школы траблшутеров» Олег Брагинский и ученица Альбина Анисимова показывают путь от запроса к управленческому решению.

Рис. 1. Управленческий вывод начинается с определения показателя
Подборка служит шпаргалкой для экспресс-диагностики бизнеса, подготовки управленческих отчётов и построения дэшбордов. Каждый запрос отвечает на отдельный вопрос: где меняется выручка, какие товары дают результат, кто возвращается за покупками и где задерживаются заказы.
Руководитель сможет оперативно понять:
- какие товары приносят больше дохода
- где возникают потери и задержки
- кто составляет клиентскую базу
- растёт ли бизнес.
Руководителю подборка поможет поставить задачу аналитику и проверить логику отчёта. Специалисту – получить первую выборку, найти отклонение и подготовить данные для карточки показателя или графика. Одну и ту же расчётную основу можно использовать при разовой проверке и регулярном мониторинге.
Код написан на Transact-SQL (T-SQL) для Microsoft SQL Server. Таблицы и поля взяты из учебной модели AdventureWorks: заказы, позиции продаж, товары и клиенты. Для применения в компании нужно сопоставить их с собственной схемой, согласовать смысл состояний и проверить расчёты на нескольких известных операциях.
В примерах выбран 2023 год; отдельные запросы рассматривают месяц или дату внутри него. Для работы задайте период, за который в базе есть записи, и сравнивайте полные окна наблюдения. Все суммы приводятся в единицах исходных данных; разные валюты требуют пересчёта.
Что показывают финансовые метрики?
Финансовые метрики показывают объём реализации, доходность и выполнение целей. При одинаковой выручке прибыль может различаться.
В таблице Sales.SalesOrderHeader хранится шапка заказа. Для товарной выручки используем SubTotal: сумма после скидок, без налога TaxAmt и доставки Freight. Поле TotalDue включает оба начисления; его нельзя смешивать с выручкой по позициям LineTotal.
1. Выручка
Выручка показывает объём реализации за выбранный период. В примерах учитываем отгруженные заказы со статусом 5 и относим сумму к дате оформления OrderDate. Расчёт позволяет сравнивать продажи, но не показывает фактическое поступление денег или бухгалтерское признание дохода.
Простейший способ – вычислить выручку за один год или за указанный период:

Рис. 2. Выручка относится к товарным позициям отгруженных заказов
Годовую выручку можно сопоставить с предыдущим годом: показать абсолютное изменение и процент прироста. Если прошлогодняя сумма равна нулю или отсутствует, процент не определён. NULLIF предотвращает деление на ноль; результат NULL сохраняет смысл отсутствующего сравнения.

Рис. 3. Прирост требует ненулевой базы сравнения
Перед сравнением годовых сумм проверьте полноту обоих периодов. Полный прошлый год и несколько месяцев текущего дают разные окна наблюдения. Отрицательный процент при ненулевой прошлой выручке означает снижение, а NULL при нулевой базе не следует заменять нулевым ростом.
Для сверки возьмите несколько заказов из выбранного периода и сложите SubTotal вручную. Если сумма расходится с отчётом, сначала проверьте отбор состояний и дат. Соединение шапки с позициями без предварительной агрегации может многократно повторить сумму одного заказа.
2. Количество заказов
Количество заказов отражает активность продаж. В сочетании с выручкой и средним чеком показатель объясняет, за счёт чего меняется результат: числа покупок или суммы каждой сделки. Для согласованности финансовых метрик считаем ту же выборку отгруженных заказов.

Рис. 4. Число заказов и выручка должны описывать одну выборку
Второй запрос сравнивает годовое число заказов с предыдущим периодом. Процент прироста считается относительно прошлогоднего количества. Перед оценкой динамики нужно проверить полноту обоих лет: незавершённый период нельзя напрямую сопоставлять с целым годом.

Рис. 5. Годовое сравнение имеет смысл при полной истории
Год без отгруженных заказов не появляется после группировки. Соединение ищет предыдущий календарный год, а не соседнюю доступную строку; при его отсутствии сравнение даст NULL. Полный ряд лет требует отдельного календаря и явно обозначенных периодов без продаж.
COUNT считает заказы в шапке, где SalesOrderID идентифицирует каждую заявку. После соединения с деталями один заказ повторяется по числу товарных позиций. В такой выборке нужен отдельный подсчёт уникальных заявок либо предварительное свёртывание строк заказа.
3. Средний чек
Средний чек показывает товарную выручку в расчёте на один отгруженный заказ.
Средний чек = Выручка / Количество заказов
AVG(SubTotal) усредняет товарные суммы отгруженных заказов.
Средний чек за год – average order value (AOV):

Рис. 6. Средний чек связывает денежный результат с числом заказов
Годовой AOV и прирост относительно предыдущего периода:

Рис. 7. Прирост среднего чека не показывает причину изменения
Для общего среднего за несколько лет сложите выручку и число заказов, после чего разделите суммы. Простое среднее годовых чеков при разном количестве заявок даст иной результат: год с небольшим объёмом будет иметь такой же вес, как наиболее активный.
Средний чек по заказам отличается от средней цены товара и от средней выручки на клиента. Покупатель может оформить несколько заявок, а одна заявка – содержать несколько позиций. Сначала выбирайте единицу наблюдения, затем называйте рассчитанное среднее.
4. Выручка по дням, неделям и месяцам
Две компании могут получить за месяц по 10 млн руб. Первая зарабатывает примерно по 330 тыс. ежедневно, вторая получает 9 млн в последний день. Одинаковая итоговая сумма скрывает разную устойчивость сбыта и зависимость от отдельных сделок.

Рис. 8. Равная месячная выручка скрывает разную устойчивость продаж
Разбивка выручки внутри периода помогает:
- контролировать стабильность продаж в течение месяца
- оценивать эффект рекламных кампаний и акций
- выявлять сезонность и периоды повышенного спроса
- прогнозировать будущие доходы
- находить дни с провалами.
По дням группируем полную дату, а не только её номер. Тогда при расширении периода январское и февральское числа не окажутся одинаковыми подписями:

Рис. 9. Полная дата сохраняет хронологию ежедневных продаж
По неделям используем дату понедельника. Группировка не зависит от настройки DATEFIRST и не объединяет одноимённые недели разных лет:

Рис. 10. Дата понедельника однозначно определяет неделю
В дневной выборке отсутствие даты означает отсутствие отгруженных заказов с такой датой оформления. Непрерывный график требует календаря и соединения с агрегатом. Ноль уместен, если источник за день полностью загружен и продаж действительно не было.
Неделя может пересекать границу месяца или года. В качестве её ключа используется дата понедельника, а не номер недели без года. Для полного недельного сравнения задавайте одинаковые границы: часть недели на краю выборки нельзя трактовать как законченный период.
Год и месяц задают группу; на границах выборки возможны неполные месяцы.

Рис. 11. Год отделяет одноимённые месяцы
Номер месяца используется вместе с годом: январь 2023 года не объединяется с январём 2024-го. Месяц без продаж отсутствует в результате. Для плана и непрерывного графика добавьте календарь месяцев, затем соедините его с рассчитанной выручкой.
5. Выручка нарастающим итогом
Нарастающий итог показывает, как постепенно формируется результат. Если в январе выручка составила 1 млн руб., а в феврале – 1,5 млн, накопленная сумма за два месяца равна 2,5 млн. В запросе итог начинается заново для каждого календарного года.

Рис. 12. Запрос 5а: год и месяц задают ключ промежуточной суммы
В SELECT задаём ключ периода и сумму реализации. Отдельные поля года и месяца сохраняют хронологию, даже если выборка охватывает несколько лет.
Блоки 5а, 5б и 5в выполняйте вместе как один запрос. Отдельный фрагмент может быть синтаксически неполным. Сумма учитывает выбранный диапазон: если он начинается позже января, результат не показывает накопление с начала года.
Далее отбираем отгруженные заказы за выбранный диапазон и группируем их по году и месяцу. Каждому сочетанию этих двух значений будет соответствовать одна строка.

Рис. 13. Запрос 5б: агрегат содержит по одной строке на активный месяц
Выборка RevenueByMonth готова для накопления: год и месяц определяют порядок строк, выручка – величину очередного слагаемого. Месяцы без отгруженных заказов в ней отсутствуют.
В итоговом SELECT оставляем месячную выручку и добавляем оконную сумму. PARTITION BY задаёт год, ORDER BY – месяц, а ROWS UNBOUNDED PRECEDING включает все предшествующие строки.

Рис. 14. Запрос 5в: оконная сумма начинается заново для каждого года
Порядок месяцев определяет результат оконной суммы. PARTITION BY начинает отдельное накопление для каждого года, а ROWS задаёт последовательное добавление строк. Если нужен итог за весь выбранный диапазон без ежегодного обнуления, правило накопления придётся изменить.
6. Средняя дневная выручка
Средняя дневная выручка показывает объём продаж в расчёте на один активный день. В выбранном варианте знаменатель включает даты, в которые были отгруженные заказы. Формула расчёта:
Средняя дневная выручка = Выручка / Дни с продажами
Показатель помогает:
- быстрее замечать снижение или рост активности бизнеса
- оценивать текущий темп продаж
- планировать будущую выручку.
Среднее можно считать по всем календарным дням, рабочим датам или дням с продажами. В примере используется последний вариант: отсутствие заказов не уменьшает результат. Выбор знаменателя нужно сохранять при сравнении периодов разной продолжительности.

Рис. 15. Дни без продаж исключены из выбранного среднего
Сравните два знаменателя: число активных дат и длительность периода. При редких продажах среднее по активным дням может заметно превышать среднее по календарным. Подписывайте выбранный вариант на графике, чтобы читатель мог воспроизвести расчёт.
7. Маржинальность
Маржинальность показывает долю товарной выручки после вычета себестоимости. В демонстрации используем стандартную стоимость товара; расчёт даёт приближение к валовому результату. Формула:
Маржинальность, % = (Выручка – Себестоимость) / Выручка × 100%
Высокий объём реализации не гарантирует высокой прибыли. Сравнение товаров и категорий помогает выбирать направления для проверки цен и ассортимента. Расчётная маржинальность не учитывает операционные расходы, налог на прибыль и прочие затраты компании.
Для расчёта соединяем позиции заказов и справочник товаров:
- Sales.SalesOrderDetail хранит количество OrderQty и сумму позиции после скидки LineTotal
- Production.Product содержит стандартную стоимость StandardCost.

Рис. 16. Стандартная стоимость даёт приближение к валовой марже
Суммарную маржинальность считайте как отношение общего валового результата к общей выручке. Среднее процентов отдельных товаров даёт им одинаковый вес. В расчёте по суммам товар с большой выручкой влияет на итог сильнее, что соответствует структуре продаж.
Маржинальность по категориям позволяет сопоставить доходность групп товаров за выбранный год. StandardCost отражает значение из текущего справочника. Для достоверной исторической оценки нужна себестоимость, действовавшая при продаже, например из истории затрат.

Рис. 17. Запрос 7а: валовой результат рассчитан по стандартной стоимости
У товара без подкатегории или категории результат остаётся в строке «Без категории». Сумма выручки всех групп должна совпасть с общим расчётом по тем же датам и статусам. Такое сопоставление помогает обнаружить потери строк при соединениях.
Выражения в SELECT задают поля результата. Далее определяем источники, связи между таблицами и границы периода. LEFT JOIN сохраняет позиции без категории, а GROUP BY объединяет суммы по группам товаров.

Рис. 18. Запрос 7б: соединения сохраняют продажи без категории
8. Анализ скидок
Поле UnitPriceDiscount задаёт долю скидки в каждой позиции заказа. Запрос рассчитывает простое среднее по строкам, сумму предоставленного дисконта и выручку после него. Средний процент не взвешен по стоимости и количеству товара; это важно при сравнении корзин.

Рис. 19. Средняя скидка по строкам не взвешена по стоимости
Скидки помогают привлекать клиентов и стимулировать спрос. При произвольном использовании уступки могут снижать доходность и формировать зависимость от низких цен. Анализ показывает масштаб дисконта, но сам по себе не доказывает эффективность акции.
Сумма скидки выражена в денежных единицах базы, а средняя скидка – в процентах. Процент усредняется по товарным позициям без учёта их стоимости. Для взвешенной доли скидки потребуется разделить суммарную скидку на денежный объём до её предоставления.
Как оценивать ассортимент?
После финансовых показателей стоит определить источники выручки. Анализ ассортимента выявляет лидеров и позиции с отрицательной динамикой. Категории помогают оценивать вклад товарных направлений, но снижение суммы продаж ещё не доказывает падение спроса.
Результаты новинок показывают, как обновление ассортимента связано с реализацией. Информация пригодится при планировании закупок и продвижения. Выбор позиций для развития требует учитывать доходность, наличие на складе и срок пребывания товара на рынке.
9. Топ-10 товаров
Рейтинг выделяет наименования с наибольшей выручкой. Список помогает планировать закупки, поддерживать наличие и выбирать приоритеты продвижения. В запросе группируем продажи по идентификатору и названию, чтобы не объединять разные товары с одинаковыми именами.
Лидеров можно выбирать по числу заказов, количеству проданных единиц или сумме реализации. Выручка отражает денежный вклад, но не заменяет прибыль. Для закупок рейтинг стоит дополнить маржинальностью и оборачиваемостью; при равных суммах порядок задаёт ProductID.

Рис. 20. Денежный вклад товара отличается от его прибыльности
Проверьте, какую задачу решает рейтинг: наибольшая выручка не означает наибольшее количество проданных единиц или прибыль. При одинаковой сумме дополнительный порядок по ProductID делает список воспроизводимым. Разные товары с одним названием остаются отдельными.
10. Выручка по категориям
Выручка по категориям показывает вклад товарных направлений. Руководитель получает основу для решений по ассортименту и продвижению. Низкая сумма может быть связана с ценой, наличием или составом продукции, поэтому причину отклонения нужно проверять отдельно.
Связь с группой проходит через Production.ProductSubcategory и Production.ProductCategory. Используем LEFT JOIN, чтобы позиции без заполненной категории не исчезли из отчёта. Отдельная строка «Без категории» помогает контролировать полноту справочника.

Рис. 21. Позиции без категории остаются видимыми
Изменение доли категории может происходить из-за роста другой группы. Поэтому долю рассматривайте вместе с абсолютной выручкой и общим объёмом периода. Прежде чем менять ассортимент, проверьте состав категорий и одинаковую полноту сравниваемых данных.
11. ABC-анализ
ABC-анализ делит ассортимент по вкладу в выручку. В примере сортируем товары по убыванию суммы реализации и считаем накопленную долю. Границы групп задаём на уровнях 80 и 95%:
- A – позиции, закрывающие первые 80% выручки, включая товар, пересекающий границу
- B – следующая часть ассортимента до 95% накопленной суммы
- C – оставшиеся наименования.
Класс определяем по доле, накопленной до текущего товара. Поэтому даже единственный крупный лидер остаётся в A, а позиция на границе завершает предыдущую группу. При равной выручке порядок задаёт ProductID; пороги можно изменить под задачу бизнеса.

Рис. 22. Запрос 11а: накопленная доля строится после ранжирования товаров
Промежуточные выборки Revenue и Shares дают выручку, индивидуальную и накопленную доли. Итоговый SELECT использует разность CumShare – Share: так товар на границе завершает предыдущий класс.

Рис. 23. Запрос 11б: класс зависит от доли перед добавлением текущего товара
Граница класса определяется накопленной долей до добавления текущего товара. Поэтому товар, пересекающий порог 80%, остаётся в A, а пересекающий 95% – в B. При нулевой общей выручке доли не определены и буквенный класс не назначается.
12. Товары с отрицательной динамикой продаж
Сравнение соседних месяцев выявляет товары, чья выручка уменьшилась. Учитываем и полное прекращение продаж: отсутствующую реализацию текущего периода принимаем за ноль. Иначе позиция с самым резким падением могла бы не попасть в отчёт.
Товар может оставаться в группе A, хотя объём реализации уже снижается. Отклонение служит поводом проверить спрос, цены, наличие и действия конкурентов. Параметр @CurrentMonth задаётся первым числом месяца; предыдущая граница вычисляется автоматически.

Рис. 24. Прекращение продаж учитывается как падение до нуля
Сначала смотрите абсолютное изменение, затем процент. Падение с небольшой базы может дать большой относительный результат. Нулевая текущая выручка включена в сравнение, но отсутствие отгрузок само по себе не объясняет причину: её нужно искать отдельно.
13. Новинки с лучшими продажами
Рейтинг новинок выделяет товары, выведенные на рынок в выбранном периоде, с наибольшей выручкой. Список помогает оценивать обновление продуктовой линейки. Запрос показывает продажи за указанный диапазон, а не за одинаковое число дней с момента запуска.
В AdventureWorks дата начала продаж хранится в SellStartDate. В рабочей базе могут быть только даты поставки или поступления на склад; смысл признака новизны нужно определить заранее. Ограничиваем старт обеими границами периода, чтобы не включать будущие запуски.

Рис. 25. Дата запуска ограничивает состав новинок
SellStartDate обозначает начало продаж в карточке товара. Это не обязательно дата первой фактической покупки. У новинок разная длительность присутствия на рынке, поэтому для сравнения результатов полезно дополнительно выровнять время с момента запуска.
Что известно о поведении клиентов?
Клиенты обеспечивают бизнесу спрос и денежный поток. Компаниям полезно отслеживать базовые показатели поведения покупателей, чтобы оценивать результат рекламы и программ лояльности. По одному числу нельзя установить причину изменения клиентской активности.
Повторные покупки, интервалы между заказами и вклад крупных покупателей показывают разные стороны отношений с компанией. Метрики помогают выбирать вопросы для дальнейшего анализа. Для сопоставления результатов нужно одинаково определять покупку и период наблюдения.
14. Количество новых клиентов
Нового клиента можно определять по регистрации или первой покупке. В примере ориентируемся на самый ранний отгруженный заказ во всей доступной истории. Сначала ищем первую дату для каждого CustomerID, затем отбираем покупателей нужного периода.
Первая выборка возвращает по одной дате для каждого покупателя. Итоговый COUNT считает строки этой выборки, а не количество заказов. Покупатель с несколькими заявками в год первой покупки увеличивает число новых клиентов только на единицу.
Если база содержит только последние годы, прежний покупатель может выглядеть новым. Показатель оценивает приток клиентов лишь в пределах сохранённой истории. Эффект рекламы проверяют дополнительно: первая покупка сама по себе не указывает источник привлечения.

Рис. 26. Первая покупка определяется по всей доступной истории
15. Повторные покупки
Повторные покупки можно выразить двумя способами:
- числом клиентов, совершивших два и более заказа за выбранный период
- долей таких покупателей среди всех активных клиентов за тот же срок.
RPR помогает оценивать возвращаемость покупателей. Рост доли может быть связан с ассортиментом, длительностью периода или составом аудитории. Показатель не доказывает качество маркетинга сам по себе; сравнивать следует одинаковые окна наблюдения.
Repeat Purchase Rate (RPR) – доля клиентов с повторными заказами. В примере считаем покупателей с двумя и более отгруженными заявками внутри периода. Повтор после его окончания не попадёт в результат, даже если клиент позже вернулся. Формула:
RPR, % = Клиенты с повторной покупкой / Активные клиенты × 100%
Покупатель с одной заявкой до начала периода и одной внутри него не попадёт в повторные для этого окна. Здесь повтор означает не меньше двух отгруженных заказов за выбранный период. Для показателя возвращения прежних клиентов требуется другой отбор.

Рис. 27. Повтор учитывается внутри одинакового окна наблюдения
16. Средний интервал между покупками
Средний интервал показывает число календарных границ между соседними заказами клиента. В запросе рассматриваем всю доступную историю и усредняем отдельные интервалы. Показатель используют для:
- планирования маркетинговых активностей
- прогнозирования будущих продаж
- настройки напоминаний.
Покупатели с единственным заказом не участвуют в расчёте. Клиенты, возвращавшиеся чаще, дают больше интервалов и сильнее влияют на общее среднее. Для дробного результата приводим число дней к DECIMAL до AVG: усреднение целых чисел в T-SQL сохраняет целочисленный тип.

Рис. 28. Частые покупатели дают больше интервалов для среднего
Два способа усреднения дают разный вес постоянным покупателям.

Рис. 29. Покупатели с разным числом интервалов имеют разный вес
У клиента с единственным заказом нет интервала между покупками. Несколько заявок в один день дают нулевой календарный интервал. Среднее рассчитано по всем доступным промежуткам: клиенты с большим числом заказов дают больше наблюдений.
17. Ценность клиента и границы LTV
Lifetime Value (LTV) – оценка ценности клиента за время отношений с компанией. Модели могут прогнозировать будущую прибыль или учитывать уже полученный доход. Распространённая упрощённая формула:
LTV = Средний чек × Частота покупок × Срок отношений
Если все множители рассчитаны по одному наблюдаемому интервалу, произведение равно накопленной выручке клиента. Частота содержит количество заказов, делённое на срок; при умножении длительность сокращается. Такой расчёт не прогнозирует будущие поступления.
Сохраняем компоненты формулы для сравнения покупателей и называем итог наблюдаемой выручкой. Учитываем клиентов минимум с двумя заказами в разные календарные даты. Для прогноза LTV потребуются допущения об удержании, будущих покупках и затратах обслуживания.

Рис. 30. Произведение исторических множителей не прогнозирует LTV
Средний чек, частота и срок получены из одной истории; частоту и длительность выражаем в согласованных единицах времени. Наблюдаемую выручку берём напрямую из суммы заказов, чтобы не накапливать округления произведения. Для прогноза LTV нужны отдельный горизонт, модель удержания, будущие покупки и затраты обслуживания.
18. Топ-10 клиентов
Посмотрим, на каких клиентов приходится значительная часть продаж, есть ли зависимость бизнеса от крупных покупателей. Список пригодится при разработке маркетинговых кампаний, планировании сбыта, персонализации предложений, управлении рисками.
Рейтинг строится по суммарной выручке за период. Покупатель с редкими заказами и высоким средним чеком может приносить больше дохода, но не обязательно прибыли. Долю каждого клиента считаем относительно всей выбранной совокупности, до ограничения списка десятью строками.

Рис. 31. Доля клиента рассчитана до отбора десяти лидеров
Доля крупного клиента рассчитана относительно выручки всех покупателей периода, а не суммы десяти лидеров. Поэтому доли строк рейтинга обычно не дают 100%. Для оценки зависимости бизнеса складывайте доли лидеров, сохраняя общий знаменатель.
19. Клиенты без покупок более N дней
Список показывает покупателей без отгруженных заказов более заданного числа дней. Последнюю покупку ищем только на дату анализа: будущие записи не должны скрывать прошлую неактивность. Отчёт помогает выбрать клиентов для проверки причин ухода и кампании возврата.
Порог зависит от цикла сделки: для регулярного спроса важны недели, для редких приобретений – месяцы или год. В примере N = 180 дней, дата анализа – 30 июня 2023 года. Клиенты без единой покупки в расчёт не входят; для них нужна отдельная выборка из справочника.

Рис. 32. Будущие заказы не меняют состояние на дату анализа
Запрос описывает состояние на фиксированную дату анализа. Клиент без предшествующей отгруженной покупки сюда не входит: его нельзя считать переставшим покупать по данному определению. Отдельно анализируйте зарегистрированных клиентов, которые ещё не сделали первый заказ.
Как сравнивать территории, продавцов и план?
20. Продажи по регионам
В AdventureWorks заказ может быть связан с территорией из Sales.SalesTerritory. В рабочей системе регионом бывает город доставки, филиал или зона ответственности менеджера. Выбор признака нужно зафиксировать до сравнения результатов подразделений.

Рис. 33. Заказы без региона не исчезают при соединении
Выручка по территориям пригодится для планирования развития и оценки работы филиалов. LEFT JOIN сохраняет заказы без привязанного региона: отдельная строка показывает пробелы в данных. География продаж сама по себе не объясняет эффективность рекламной кампании.
Территория заказа и адрес доставки могут описывать разные управленческие разрезы. Смена назначения территории также способна изменить сравнение во времени. Перед оценкой регионального роста проверьте, что ключ и правила классификации сохранились.
Анализ продаж помогает оценивать территории, работу сотрудников и выполнение плана. Отклонения показывают, где нужна дополнительная проверка. Вклад продавца зависит не только от усилий, но и от закреплённой клиентской базы, ассортимента и условий территории.
21. Продажи по продавцам
Вклад продавца оцениваем по выручке, количеству заказов и среднему чеку. В выборку входят только заявки с заполненным SalesPersonID. Поэтому процент показывает долю среди учтённых сотрудников, а не среди всех продаж компании: онлайн-заказы без менеджера исключены.
Результаты пригодятся для обсуждения нагрузки, мотивации и плана. При начислении бонусов нужно учитывать роли, состав портфеля и другие условия работы. По снижению выручки нельзя установить выгорание; причина требует отдельной проверки.

Рис. 34. Сначала рассчитывается вклад каждого назначенного продавца
Выручка заявки приписывается указанному продавцу целиком. Запрос не распределяет её между участниками сделки и не оценивает личный вклад каждого. Для командных продаж нужны согласованные правила распределения, иначе рейтинг отражает только владельца записи.
22. Выполнение плана продаж
Выполнение плана показывает отношение фактической выручки к целевой сумме за одинаковый период. Расчёт должен использовать сопоставимый состав продаж и единицы измерения. Формула:
Выполнение плана, % = Фактическая выручка / Плановая выручка × 100%
Значение меньше 100% означает недовыполнение плана, 100% – точное выполнение, выше 100% – перевыполнение. Помогает руководителю оценить, достигает ли бизнес поставленных целей. Для корректного анализа план должен быть задан для того же периода, за который рассчитывается фактическая выручка.
Отдельной таблицы Sales.SalesPlan в стандартной AdventureWorks нет. Чтобы пример запускался без изменения базы, задаём месяцы и планы внутри запроса через VALUES. Вместо NULL нужно вписать собственные суммы; неизвестные показатели не заменяем вымышленными числами.

Рис. 35. План и факт собираются по одним и тем же месяцам
Заполните все плановые суммы и проверьте их единицы до интерпретации процентов. NULL означает неизвестный план, ноль – заданный нулевой план. В обоих случаях отношение не определено. При известном положительном плане и отсутствии продаж выполнение равно нулю.
Где возникают операционные сбои?
При хороших продажах бизнес может терять деньги из-за операционных сбоев. Отмены и задержки увеличивают нагрузку, затраты и риск недовольства покупателей. Ниже считаем частоту событий; денежную величину потерь по одним статусам и датам определить нельзя.
23. Отменённые заказы
Набор состояний заказа зависит от компании. В AdventureWorks поле Status содержит 6 для отмены – Cancelled. Для доли отменённых заявок учитываем все заказы периода, в отличие от выручки, рассчитанной только по отгруженным.
Высокая доля отмен может быть связана с отсутствием товара, сроками, ценой или обработкой. Отчёт показывает распространённость проблемы и помогает выбирать участки для проверки. Причину нужно устанавливать по дополнительным сведениям, а не по одному проценту.
Разбивка по товарам, регионам и продавцам уточнит, где чаще прерываются сделки. При пустом периоде количество заявок равно нулю, а процент не определён. NULLIF предотвращает ошибку; отсутствие наблюдений не следует интерпретировать как отсутствие проблемы.

Рис. 36. Процент отмен зависит от всех заявок периода
Статус в шапке отражает текущее состояние записи. Запрос выбирает заказы по дате оформления, а не отмены, произошедшие в этом периоде. Для анализа времени отмены потребуется история переходов состояний с датой каждого события.
24. Отгрузка после срока получения
Поздняя отгрузка означает, что заказ отправлен уже после планового срока получения клиентом. Метрика даёт сигнал для проверки склада и обработки. Она не измеряет все нарушения доставки: своевременно отправленный груз тоже может прибыть с опозданием.
Отправленный до DueDate заказ может всё равно прибыть с опозданием. В представленную выборку он не попадёт. Поэтому найденные случаи – лишь заказы, которые отправили позже обещанного срока получения; процент таких отправок не равен доле всех поздних доставок.
В AdventureWorks DueDate задаёт срок получения заказа, ShipDate – дату отправки. Запрос выбирает отгруженные заявки с ShipDate > DueDate. Для полноценного контроля доставки нужна фактическая дата прибытия; неотгруженные заказы здесь не учитываются.

Рис. 37. Поздняя отправка не охватывает все задержки доставки
25. Долго обрабатываемые заказы
Допустимый срок обработки зависит от организации. В примере считаем отгруженные заказы, между оформлением OrderDate и отправкой ShipDate которых прошло больше восьми календарных дней. DATEDIFF(day) считает смену дат, а не точное число интервалов по 24 часа.

Рис. 38. Срок обработки определяется по календарным границам
Продолжительность обработки помогает искать узкие места и оценивать изменения процесса. Показатель не зависит от обещанного клиенту срока и поэтому отличается от предыдущего. Незавершённые заявки с пустой ShipDate требуют отдельного контроля текущей очереди.
Запрос рассматривает уже отправленные заказы. Заявки без ShipDate не входят в результат, даже если давно ожидают обработки. Для текущей очереди нужен отдельный расчёт возраста незавершённых заказов на дату анализа с отбором допустимых состояний.
Как выбрать первые запросы?
Таблица связывает шесть типичных проблем с номерами задач и ближайшими проверками.

Рис. 39. Отклонение задаёт маршрут проверки связанных показателей
Как перейти от цифр к проверке причины?
Три условных примера показывают порядок разбора. Числа выбраны для обучения; все сравниваемые окна имеют одинаковую длительность и относятся к 2023 году. Выводы опираются на одинаковые правила отбора заказов и расчёта сумм.
Почему выручка падает при росте среднего чека?
В периоде А оформлено 1000 отгруженных заказов на 10 млн руб.; в периоде Б – 900 на 9,45 млн руб. Средний чек вырос с 10 000 до 10 500 руб. Число покупок сократилось на 10%, а сумма одной сделки увеличилась на 5%; выручка снизилась на 5,5%.

Рис. 40. Рост среднего чека лишь частично компенсирует сокращение заказов
Уточните, в каких категориях уменьшилось число заказов.
Задачи 1–3 позволяют проверить связь: выручка равна числу заказов, умноженному на средний чек. Затем задача 4 покажет момент изменения, а 9–12 – вклад товаров и категорий. Рост средней суммы может отражать повышение цен, крупные сделки или сокращение доли дешёвых позиций; для проверки потребуется состав заказов.
После детализации выберите гипотезу: например, продажи определённой категории сократились одновременно с отсутствием товара. Сопоставьте даты провала с остатками и поставками. Решение о пополнении запаса принимайте после подтверждения связи; результат оцените по заказам и выручке категории за сопоставимый период.
Почему стало меньше повторных покупателей?
В периоде А покупки совершили 100 клиентов, из них 40 сделали более одного заказа; в периоде Б из 100 покупателей таких было 20. Задача 15 даст 40% и 20%: снижение на 20 процентных пунктов. Состав обеих групп может различаться, поэтому показатель ещё не устанавливает уход прежних клиентов.
Задача 14 покажет приток новых покупателей, 16 – интервалы в доступной истории, а 19 выделит неактивных на выбранную дату. Для проверки удержания сформируйте отдельные когорты по первой покупке и дайте каждой одинаковое время на возвращение. Сравните эти группы по категориям и каналам привлечения.
Если ухудшение сосредоточено в одной когорте, изучите её заказы и обращения: ассортимент, качество исполнения, срок доставки. После изменения процесса повторите сравнение для группы с таким же окном наблюдения. Рост доли повторных покупок оцените вместе с выручкой и скидками.
Почему выросла доля долгой обработки?
Среди заказов, оформленных в периоде А и затем отправленных, 80 из 1000 обрабатывались дольше восьми календарных дней; в периоде Б – 180 из 900. Задача 25 покажет рост с 8% до 20%, или на 12 процентных пунктов. Отдельно задача 24 проверит отгрузки после обещанного срока получения.
Выберите заказы с превышением срока и проследите этапы: подтверждение, комплектация, передача перевозчику. Сопоставьте длительность с товарами, подразделениями и нагрузкой; для такого разбора нужны дополнительные даты событий. Длительное ожидание запасов и задержка передачи груза требуют разных действий.
Задача 25 охватывает уже отправленные заказы. Текущую очередь с пустой ShipDate проверяйте отдельной выборкой на фиксированную дату. После устранения узкого места пересчитайте долю долгой обработки при том же пороге и составе заказов, чтобы оценить эффект изменения. Рост доли тяжёлых заказов способен ухудшить результат при неизменном процессе.
25 шпаргалок дают быстрый вход в диагностику. Для первого прохода достаточно выручки, числа заказов, среднего чека, повторных покупок и доли отмен. Сопоставьте их за одинаковые периоды: связка показателей помогает выбрать участок для проверки и сформулировать следующий вопрос.
Падение выручки разберите по числу покупок и сумме сделки, затем по товарам, регионам и продавцам. Снижение повторных заказов направляет внимание к клиентским группам; рост отмен и задержек – к этапам обработки. Каждое отклонение превращайте в гипотезу, которую можно проверить дополнительной выборкой.
Как превратить диагностику в регулярный контроль?
Проверенные расчёты сохраните как основу дэшборда. На обзорной странице покажите ключевые метрики и их динамику; детализацию оставьте для разбора причин. Для каждого показателя зафиксируйте формулу, источник, период, частоту обновления, ответственного и условие, при котором потребуется действие.

Рис. 41. Выбор бизнес-вопроса определяет показатель и способ проверки
Как проверить эффект принятого решения?
До изменения сохраните исходную выборку, параметры и расчёт. Заранее задайте критерий успеха: например, уменьшение задержек при сопоставимой нагрузке. Повторите проверку за окно той же длительности и оцените вместе основной показатель и связанные метрики.
Сравнение периодов покажет изменение результата. Чтобы связать эффект с действием, учтите сезонность, цены, состав покупателей и поток заказов. При возможности используйте сопоставимую группу, в которой процесс оставался прежним; существенные отличия опишите отдельно.
Что запомнить?
- начинать с управленческого вопроса
- проверять даты, статусы и состав суммы
- различать нулевой результат и отсутствие данных
- задавать показатель, ответственного и частоту обновления
- связывать каждое отклонение с проверкой причины и действием.
Экспресс-диагностика завершается решением: что проверить, что изменить, кто отвечает и когда оценить эффект. Запросы помогают найти отклонение, дэшборд – следить за ним, а следующая выборка – установить результат действия.