X·MPДокументация

Руководство по работе с магазином

Аналитика: данные, показатели, формулы и качество расчётов

Справочник аналитических запросов X-MP: от выбора периода и товаров до формул показателей, проверки покрытия и воспроизводимого вывода.

Зачем это нужно

Аналитика отвечает на конкретный вопрос о магазине по фактически собранным данным. Она отделяет заказы от реализованной выручки, расходы от прибыли, остаток от продаж. Агент выбирает подходящий срез, а сервис возвращает ограниченный результат с признаками качества.

Пример из работы магазина

«Найди товары, где рекламные расходы росли быстрее заказанного оборота. Покажи цифры, формулу и пробелы; не называй результат чистой прибылью без затрат».

Как начать

  1. Проверьте agent.me, readiness.get и datasets.list: нужны analytics.read и соответствующие источники магазина.
  2. Определите вопрос, период, товары и денежную базу.
  3. Выберите analysis.query для агрегатов, metrics.query для KPI либо dataset.query для строк.
  4. Прочитайте значения вместе с качеством и источниками; сохраните формулу и вывод.

Что вы получите

Проверяемый срез магазина или товаров, выбранные показатели и явные ограничения достаточности. Пропуски не заменяются нулём.

Что важно учитывать

Полнота зависит от дат, товаров и источников. Старый период не становится закрытым только по возрасту. Прибыль требует подтверждённых затрат; причинный эффект не выводится из одного сравнения.

Структура аналитического сервиса

УровеньСодержаниеИспользование
Сохранённые ответыНеизменяемые исходные результаты сбора.Происхождение и приватная выгрузка.
Нормализованные записиТовары, заказы, продажи и версии сущностей.Детализация и связь с источником.
Дневная витринаНаблюдения товара по дням с признаками наличия источника.Агрегат analysis.query.
Реестр KPIФормулы, входы, единицы, детализация и зрелость.metrics.catalog и metrics.query.
Контроль качестваПокрытие, свежесть и недостающие входы.Допустимость вывода.

Показатель, страница строк и исходный файл — разные продукты данных. Начинайте с минимального достаточного уровня. Тысячи строк не нужно переносить в чат ради одного итога.

Как выбрать метод

МетодНазначениеПроверка
cabinet.overviewОбщая картина и ведущие товары.Период и входы; не полный финансовый аудит.
product.360Один артикул за период.Товар и денежная база.
finance.summaryФинансовая сводка.Реализация, к перечислению, выплата и прибыль различаются.
analysis.queryВыбранные показатели по магазину, товарам и дням.Поля, группировка, качество и сортировка.
metrics.catalog / metrics.queryKPI с зарегистрированной формулой.Сначала определение, затем значения.
metrics.status / metrics.completenessСостояние расчётов и пробелы.Свежесть и недостающие входы.
dataset.queryСтроки для проверки вывода.Поля, дата события и пагинация.

Параметры analysis.query

ПараметрФорматПравило
date_from, date_toYYYY-MM-DDОбязательные включённые границы,1–90 дней.
group_byaccount / product / day / day_productМагазин, товар, день или товар в день. По умолчанию product.
metricsМассив имён1–12 разных показателей.
nm_idsМассив строкДо 20 артикулов; без фильтра — доступные товары.
sort_byВыбранный показательОбязан входить в metrics. Задавайте явно при своём наборе.
sort_directionasc / descВозрастание/убывание; по умолчанию desc.
limit1–50Размер страницы, по умолчанию 20.
offset0–10000Смещение для продолжения.

SQL, произвольные таблицы и чужой account_id запрещены. Магазин определяется ключом. Общую картину удобно читать несколькими тематическими срезами, затем детализировать отклонения.

Словарь всех полей analysis.query

ПолеЕдиницаОпределение / формулаКак понимать
ordered_unitsшт.Количество заказанных единиц.Заказ не равен выкупу или выплате.
ordered_gmv₽Наблюдаемый заказанный оборот.Не реализованная выручка.
cancelled_unitsшт.Наблюдаемые отменённые единицы.Не финансовые возвраты и не доказанная итоговая когорта.
sales_gmv₽Операционные продажи.Предварительная база, отдельно от закрытой реализации.
ad_spend₽Рекламные расходы источника.Учитывать окно и полноту данных.
ad_clicksсобытияРекламные клики.Не уникальные покупатели.
ad_impressionsсобытияРекламные показы.Не уникальный охват.
ad_ordersшт.Заказы, отнесённые WB к рекламе.Не доказанный дополнительный эффект рекламы.
wb_for_pay₽Сумма к перечислению по доступной финансовой базе.Не подтверждение прихода в банк.
contribution_profit₽Подтверждённая входами часть экономического результата.При недостатке затрат — null; не полная чистая прибыль.
stock_unitsшт.Последнее известное наличие товара в срезе.Не сумма остатков по дням; проверять дату источника.
opensсобытияОткрытия карточки из воронки.Наблюдаемый поток источника.
cartsсобытияДобавления в корзину.Не оплаченные покупки.
funnel_ordersшт.Заказы из источника воронки.Не смешивать автоматически с оперативными orders.
average_ordered_unit_price₽/шт.ordered_gmv / ordered_unitsЦена единицы, не средний чек корзины.
average_order_value₽/шт.Старый псевдоним average_ordered_unit_price.Для новых запросов используйте точное имя цены единицы.
cancelled_order_shareдоляcancelled_units / ordered_unitsНаблюдаемое покрытие, не финальная доля возвратов.
ad_ctrдоляad_clicks / ad_impressions0.025 = 2,5%.
cpm₽/1000 показов1000 × ad_spend / ad_impressionsМножитель 1000 применяется только здесь.
cpc₽/кликad_spend / ad_clicksНаблюдаемая стоимость клика.
cpo₽/заказad_spend / ad_ordersСтоимость атрибутированного заказа, не CAC покупателя.
cart_crдоляcarts / opensОткрытие → корзина.
order_crдоляfunnel_orders / opensОткрытие → заказ в одном источнике.
cart_to_order_crдоляfunnel_orders / cartsКорзина → заказ.
ad_spend_to_ordered_gmvдоляad_spend / ordered_gmvНе TACoS по реализации.
ad_spend_per_ordered_unit₽/шт.ad_spend / ordered_unitsВсе заказанные единицы, не только рекламные.
operational_contribution_marginдоляcontribution_profit / sales_gmvОперационная маржинальность, не закрытая чистая маржа.

Доля переводится в проценты умножением на 100. Нулевой знаменатель даёт null. «Не определено» и «нулевая эффективность» — разные утверждения.

Итоги, покрытие и качество

Коэффициенты считаются из сумм числителя и знаменателя на совпадающих product-day наблюдениях, а не как среднее дневных процентов. Итоговый коэффициент может отличаться от деления отдельно показанных итогов при различном покрытии.

ПризнакЧто проверять
numerator / denominator / multiplierСуммы и множитель формулы.
paired_observed_daysДни одновременного наблюдения обеих сторон отношения.
observed_daysДни отдельного входа; не доказательство полноты всех товаров/страниц.
null / not_readyНедостаточный вход либо неопределённое значение.
Свежесть источникаВремя исходных данных, а не только построения витрины.
Полнота периодаПропущенные дни, страницы, товары и поздние исправления.

Для account/product остаток берётся по последнему наблюдению товара в срезе, а не суммируется за каждый день. day/day_product позволяет смотреть дневные значения. Уменьшение остатка не равно продаже: возможны перемещения и другие операции.

Пример:1 клик из 10 показов в первый день и 9 из 990 во второй. Итоговый CTR=10/1000=1%, а не среднее 10% и примерно 0,91%. Для рекламы к заказам дополнительно требуется совпадающее покрытие двух источников.

Рабочие примеры запросов

analysis.query
{
  "date_from": "2026-09-01",
  "date_to": "2026-09-07",
  "group_by": "product",
  "metrics": [
    "ordered_gmv",
    "ad_spend",
    "ad_spend_to_ordered_gmv",
    "cpo"
  ],
  "sort_by": "ad_spend",
  "limit": 10
}

Срез лидеров по расходу. Большой расход сам по себе не означает убыточность: проверьте качество и экономику.

analysis.query
{
  "date_from": "2026-09-01",
  "date_to": "2026-09-07",
  "group_by": "day_product",
  "nm_ids": [
    "123456"
  ],
  "metrics": [
    "opens",
    "carts",
    "funnel_orders",
    "cart_cr",
    "order_cr"
  ],
  "sort_by": "opens",
  "limit": 20
}

Учебный артикул замените своим. Сопоставьте воронку с ценой, наличием и рекламой: падение конверсии не доказывает ухудшение карточки.

finance.summary
{
  "date_from": "2026-09-01",
  "date_to": "2026-09-07"
}

При неизвестной или смешанной валюте суммы могут быть подавлены. Сумма к перечислению не подтверждает банковскую выплату.

Библиотека KPI и дополнительные расчёты

  1. Прочитайте metrics.catalog: смысл, формулу, входы, единицы и поддержанную детализацию.
  2. Проверьте metrics.status и metrics.completeness.
  3. Передайте metric_ids, период и нужные фильтры в metrics.query.
  4. Сопоставьте значения с определением и происхождением; не смешивайте дневные и периодные записи.

metrics.query принимает до 50 ID, но это не обещает их готовность. Без grain применяется канонический уровень метрики. product_id — внутренний UUID, nm_id — артикул; campaign_id и warehouse_id нужны только поддерживающим их KPI. ID выбираются из каталога.

Для дополнительного анализа используйте разрешённую выгрузку в среде агента. Сохраняйте период, детализацию, формулу, checksum входа и ограничения. Новому расчёту нужно отдельное имя: нельзя изменять формулу существующего KPI под прежним названием.

От показателя к решению

  1. Сравнивайте одинаковые товары, денежную базу, длительность и покрытие.
  2. Отделяйте наблюдение от гипотезы: «расход вырос» — факт, «из-за ставки» — версия.
  3. Проверьте цену, наличие, ассортимент, рекламу, сезонность и запаздывание данных.
  4. Сохраните основания и предложите отдельный план действия.
  5. После действия проверьте результат, не объявляя любое совпадение причинным эффектом.

Методы и параметры

Параметры ниже относятся к MCP arguments. Идентичность и ключ не передаются в них. Для полного объекта config следуйте руководству домена.

cabinet.overview

Получить компактный обзор и ограниченное число ведущих товаров.

ПараметрТипОбязателенНазначение и ограничения
top_limitцелоенетКоличество ведущих товаров в обзоре. минимум: 1; максимум: 20; по умолчанию: 10
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "top_limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    }
  }
}

product.360

Прочитать срез одного артикула за выбранный период.

ПараметрТипОбязателенНазначение и ограничения
nm_idстрокадаАртикул WB; соблюдайте тип именно этого метода. шаблон: "^[0-9]{1,19}$"
date_fromстрокадаДата начала; смысл события или наблюдения зависит от метода. формат: "date"
date_toстрокадаВключённая дата окончания; проверяйте допустимую длину периода. формат: "date"
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "nm_id",
    "date_from",
    "date_to"
  ],
  "properties": {
    "nm_id": {
      "type": "string",
      "pattern": "^[0-9]{1,19}$"
    },
    "date_from": {
      "type": "string",
      "format": "date"
    },
    "date_to": {
      "type": "string",
      "format": "date"
    }
  }
}

finance.summary

Получить финансовую сводку с явными денежными базами и ограничениями.

ПараметрТипОбязателенНазначение и ограничения
date_fromстрокадаДата начала; смысл события или наблюдения зависит от метода. формат: "date"
date_toстрокадаВключённая дата окончания; проверяйте допустимую длину периода. формат: "date"
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "date_from",
    "date_to"
  ],
  "properties": {
    "date_from": {
      "type": "string",
      "format": "date"
    },
    "date_to": {
      "type": "string",
      "format": "date"
    }
  }
}

analysis.query

Рассчитать агрегаты и коэффициенты по магазину, товарам и дням с признаками качества.

ПараметрТипОбязателенНазначение и ограничения
date_fromстрокадаДата начала; смысл события или наблюдения зависит от метода. формат: "date"
date_toстрокадаВключённая дата окончания; проверяйте допустимую длину периода. формат: "date"
group_byстроканетГруппировка данных; проверяйте разрешённые варианты. по умолчанию: "product"; варианты: ["account", "day", "product", "day_product"]
metricsмассивнетСписок выбранных показателей; разные сервисы имеют собственный каталог. не менее элементов: 1; не более элементов: 12; по умолчанию: ["ordered_gmv", "sales_gmv", "ad_spend", "cancelled_units"]
nm_idsмассивнетСписок артикулов WB в пределах выбранного магазина. не более элементов: 20
sort_byстроканетВыбранный показатель для сортировки; должен присутствовать в запросе. по умолчанию: "ordered_gmv"; шаблон: "^[a-z][a-z0-9_]{1,63}$"
sort_directionстроканетНаправление сортировки. по умолчанию: "desc"; варианты: ["asc", "desc"]
offsetцелоенетСмещение следующей страницы либо байтов медиа; используйте значение ответа. минимум: 0; максимум: 10000; по умолчанию: 0
limitцелоенетЧисло строк/событий за страницу, а не полнота всего источника. минимум: 1; максимум: 50; по умолчанию: 20
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "date_from",
    "date_to"
  ],
  "properties": {
    "date_from": {
      "type": "string",
      "format": "date"
    },
    "date_to": {
      "type": "string",
      "format": "date"
    },
    "group_by": {
      "type": "string",
      "enum": [
        "account",
        "day",
        "product",
        "day_product"
      ],
      "default": "product"
    },
    "metrics": {
      "type": "array",
      "minItems": 1,
      "maxItems": 12,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "enum": [
          "ordered_units",
          "ordered_gmv",
          "cancelled_units",
          "sales_gmv",
          "ad_spend",
          "ad_clicks",
          "ad_orders",
          "wb_for_pay",
          "contribution_profit",
          "stock_units",
          "opens",
          "carts",
          "ad_impressions",
          "funnel_orders",
          "average_ordered_unit_price",
          "cpm",
          "ad_spend_to_ordered_gmv",
          "ad_spend_per_ordered_unit",
          "operational_contribution_margin",
          "average_order_value",
          "cancelled_order_share",
          "ad_ctr",
          "cpc",
          "cpo",
          "cart_cr",
          "order_cr",
          "cart_to_order_cr"
        ]
      },
      "default": [
        "ordered_gmv",
        "sales_gmv",
        "ad_spend",
        "cancelled_units"
      ]
    },
    "nm_ids": {
      "type": "array",
      "maxItems": 20,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "pattern": "^[0-9]{1,20}$"
      }
    },
    "sort_by": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_]{1,63}$",
      "default": "ordered_gmv"
    },
    "sort_direction": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ],
      "default": "desc"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000,
      "default": 0
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20
    }
  }
}

metrics.catalog

Прочитать определения KPI: формулы, входы, единицы, детализацию и зрелость.

Параметров нет: передайте {}.

Точная JSON Schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

metrics.status

Проверить последнюю сборку метрик и пробелы покрытия.

Параметров нет: передайте {}.

Точная JSON Schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

metrics.completeness

Получить матрицу достаточности определений, свежесть и недостающие входы.

Параметров нет: передайте {}.

Точная JSON Schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

metrics.query

Прочитать значения зарегистрированных KPI по периоду и измерениям.

ПараметрТипОбязателенНазначение и ограничения
metric_idsмассивдаСписок выбранных показателей; разные сервисы имеют собственный каталог. не менее элементов: 1; не более элементов: 50
date_fromстрокадаДата начала; смысл события или наблюдения зависит от метода. формат: "date"
date_toстрокадаВключённая дата окончания; проверяйте допустимую длину периода. формат: "date"
grainстроканетЗарегистрированный уровень детализации метрики. шаблон: "^[a-z][a-z0-9_]{1,63}$"
product_idстроканетВнутренний UUID товара; отличается от артикула WB. формат: "uuid"
nm_idцелоенетАртикул WB; соблюдайте тип именно этого метода. минимум: 1
campaign_idцелоенетИдентификатор рекламной кампании. минимум: 1
warehouse_idстроканетИдентификатор склада из доступного источника. не менее символов: 1; не более символов: 128
limitцелоенетЧисло строк/событий за страницу, а не полнота всего источника. минимум: 1; максимум: 50; по умолчанию: 20
offsetцелоенетСмещение следующей страницы либо байтов медиа; используйте значение ответа. минимум: 0; максимум: 1000000; по умолчанию: 0
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "metric_ids",
    "date_from",
    "date_to"
  ],
  "properties": {
    "metric_ids": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "pattern": "^[a-z][a-z0-9_]{1,63}$"
      }
    },
    "date_from": {
      "type": "string",
      "format": "date"
    },
    "date_to": {
      "type": "string",
      "format": "date"
    },
    "grain": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_]{1,63}$"
    },
    "product_id": {
      "type": "string",
      "format": "uuid"
    },
    "nm_id": {
      "type": "integer",
      "minimum": 1
    },
    "campaign_id": {
      "type": "integer",
      "minimum": 1
    },
    "warehouse_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "default": 0
    }
  }
}

dataset.query

Прочитать страницу нормализованных строк с выбранными полями, без raw payload.

ПараметрТипОбязателенНазначение и ограничения
dataset_keyстрокадаЗарегистрированное имя набора из datasets.list. шаблон: "^[a-z][a-z0-9_-]{1,127}$"
fieldsмассивнетИмена выбранных полей; допустимые имена зависят от набора. не менее элементов: 1; не более элементов: 16
nm_idsмассивнетСписок артикулов WB в пределах выбранного магазина. не более элементов: 20
date_fromстроканетДата начала; смысл события или наблюдения зависит от метода. формат: "date"
date_toстроканетВключённая дата окончания; проверяйте допустимую длину периода. формат: "date"
limitцелоенетЧисло строк/событий за страницу, а не полнота всего источника. минимум: 1; максимум: 50; по умолчанию: 20
offsetцелоенетСмещение следующей страницы либо байтов медиа; используйте значение ответа. минимум: 0; максимум: 10000; по умолчанию: 0
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "dataset_key"
  ],
  "properties": {
    "dataset_key": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_-]{1,127}$"
    },
    "fields": {
      "type": "array",
      "minItems": 1,
      "maxItems": 16,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "pattern": "^[a-z][a-z0-9_]*$"
      }
    },
    "nm_ids": {
      "type": "array",
      "maxItems": 20,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "pattern": "^[0-9]{1,19}$"
      }
    },
    "date_from": {
      "type": "string",
      "format": "date"
    },
    "date_to": {
      "type": "string",
      "format": "date"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000,
      "default": 0
    }
  }
}

Связанные возможности

Аналитика магазина

Разбираться в расходах, продажах и причинах изменений

Доступно. Прибыль рассчитывается только при достаточных данных о себестоимости и расходах.

Техническая справка для агента и разработчика

Этот раздел предназначен для настройки интеграции. Для обычной работы начните с шагов выше.