Surrika

Дубли в продажах по дате, каналу и артикулу: как проверить выгрузку

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

Отчеты и данные

Как считать

  1. Возьмите продажи за последние 12 месяцев, чтобы проверка поймала повторные загрузки прошлых месяцев, а не только свежие.
  2. Соберите строки в группы по дню, каналу и артикулу и посчитайте, сколько строк попало в каждую группу.
  3. Сложите строки во всех группах и сравните с числом групп, лишние строки это дубли.
  4. По каждому каналу посчитайте долю строк из групп с двумя копиями и больше.
  5. Отдельно выведите максимум копий в одной группе, чтобы отличить повторную загрузку от разбивки заказа.

Расчет на выгрузках магазина

Пример посчитан на выгрузках вымышленного мебельного магазина: продажи сайта и трех маркетплейсов, реклама, сделки CRM и остатки за 2024-2025 годы.

В годовой выгрузке продаж появились строки, которые повторяют друг друга по дате, каналу и артикулу. Как проверить, сколько таких дублей и в каких каналах их больше?

Проверка дублей продаж по каналам за 12 месяцев

Канал Строк в дублях Доля повторных строк Групп дата канал артикул Максимум копий в группе Строк всего
Ozon 0 0 % 3 269 1 3 269
Wildberries 0 0 % 3 565 1 3 565
Сайт 0 0 % 3 742 1 3 742
Яндекс Маркет 0 0 % 2 274 1 2 274

SQL, по которому посчитано

WITH s AS (
    SELECT date, channel, sku
    FROM sales
    WHERE date >= (SELECT max(date) FROM sales) - INTERVAL 12 MONTH
),
g AS (
    SELECT channel, date, sku, count(*) AS copies
    FROM s
    GROUP BY channel, date, sku
)
SELECT
    channel,
    count(*) AS key_groups,
    sum(copies) AS rows_total,
    coalesce(sum(copies) FILTER (WHERE copies > 1), 0) AS dup_rows,
    max(copies) AS max_copies,
    round(coalesce(sum(copies) FILTER (WHERE copies > 1), 0)::DOUBLE / sum(copies), 4) AS dup_share
FROM g
GROUP BY channel
ORDER BY dup_rows DESC, channel

Где в выгрузках кабинетов появляются дубли продаж

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

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

Сравнение строк целиком по всем полям пропускает дубли, у которых выручка разошлась на копейки или название товара записано иначе. Ключ проверки держите коротким: дата, канал, артикул. Остальные поля в ключ не входят, поэтому расхождение в сумме или в названии не спрячет дубль. Дату приведите к одному дню до группировки, если в разных источниках она приходит со временем.

Как читать долю повторных строк по каналам

Один и тот же артикул в один день на сайте и на маркетплейсе это две разные продажи, поэтому канал входит в ключ и такие пары дублями не считаются. Доля повторных строк показывает, какая часть выгрузки задвоена, и не зависит от размера канала. Канал с наибольшей долей проверяйте первым, даже если строк в нем меньше всего. Максимум копий в одной группе подсказывает природу сбоя. Две копии обычно означают повторную загрузку, три и больше означают разбивку заказа на строки.

Что делать с найденными дублями продаж

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

Частые ошибки

Сумма штук вместо числа строк

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

Проверка только последнего месяца

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

Один канал записан двумя вариантами названия

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

Вопросы

Дубль продажи и повторная покупка это одно и то же?

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

Сколько строк на одну дату, канал и артикул считается нормой?

Одна. Две строки и больше означают, что одна продажа попала в выгрузку дважды, и такую группу разбирают вручную.

Дублей нет, но выручка в отчете выше кабинета. В чем причина?

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

Посчитайте это на своих выгрузках

Бросьте выгрузки на доску Surrika и задайте вопрос обычными словами. Ответ придет графиком, а под ним будет SQL, по которому он посчитан.

14 дней бесплатно, карта не нужна.

По теме

Все задачи