Surrika

Как проверить полноту данных в выгрузке продаж

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

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

Как считать

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

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

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

Как проверить, что в выгрузке продаж нет пропущенных дней по каналам за последние 12 месяцев?

Дни с продажами и пропуски по каналам за 12 месяцев

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

WITH bounds AS (
    SELECT max(date) AS max_date
    FROM sales
),
period AS (
    SELECT (max_date - INTERVAL 12 MONTH)::DATE AS start_date,
           max_date::DATE AS max_date
    FROM bounds
),
calendar AS (
    SELECT CAST(unnest(generate_series(
        (start_date + INTERVAL 1 DAY)::TIMESTAMP,
        max_date::TIMESTAMP,
        INTERVAL 1 DAY
    )) AS DATE) AS date
    FROM period
),
channels AS (
    SELECT DISTINCT channel
    FROM sales
),
expected AS (
    SELECT c.channel,
           count(*) AS expected_days
    FROM channels c
    CROSS JOIN calendar
    GROUP BY c.channel
),
actual AS (
    SELECT channel,
           count(DISTINCT date) AS days_with_sales,
           min(date) AS first_sale,
           max(date) AS last_sale
    FROM sales
    WHERE date > (SELECT max(date) FROM sales) - INTERVAL 12 MONTH
    GROUP BY channel
)
SELECT e.channel,
       e.expected_days,
       coalesce(a.days_with_sales, 0) AS days_with_sales,
       e.expected_days - coalesce(a.days_with_sales, 0) AS missing_days,
       round(coalesce(a.days_with_sales, 0) * 1.0 / e.expected_days, 4) AS coverage_share,
       a.first_sale,
       a.last_sale
FROM expected e
LEFT JOIN actual a
    ON e.channel = a.channel
ORDER BY coverage_share ASC, e.channel
LIMIT 30

Откуда берутся цифры

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

Как считать полноту по каналам

Для каждого канала считаются дни, в которые есть хотя бы одна строка продаж. Это число сравнивается с количеством дней в периоде. Доля полноты равна числу дней с продажами, деленному на число календарных дней. Пропуски считаются как разница между календарными днями и днями с продажами. Результат округляется до четырех знаков после запятой, доля 0.985 означает 98.5 процента.

Как читать результат

Канал с долей полноты 1.0 имеет запись за каждый календарный день периода. Канал с долей 0.85 пропустил примерно 15 процентов дней, и это нужно сверить с расписанием продаж. Если пропуски идут подряд в начале или конце периода, проверьте границы выгрузки. Если пропуски разбросаны по будням, возможна потеря части файлов или ошибка фильтра.

Что делать с выводом

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

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

Считать пустой день ошибкой

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

Проверять только общее число строк

Общая сумма строк может сойтись, пока один канал потерял неделю, а другой получил дубли. Считайте полноту отдельно по каналам и дням.

Не фиксировать границы периода

Без явного старта и конца периода доля полноты меняется от запуска к запуску. Отсчитывайте 12 месяцев от последней даты в продажах и сохраняйте эту границу в отчете.

Игнорировать дубли

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

Вопросы

Что считается полным днем в выгрузке продаж?

День считается полным для канала, если в нем есть хотя бы одна строка продаж. Для проверки полноты важен сам факт записи за день, количество товаров вторично.

Почему в расчете 365 дней, а не 12 месяцев по 30 дней?

Период строится от последней даты в продажах и включает все календарные дни. Поэтому число дней зависит от границ данных. Фиксированные 30 дней в месяце дают смещение и ложные пропуски.

Можно ли проверить полноту по всем каналам сразу?

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

Что делать, если продаж в канале не было совсем?

Канал попадет в проверку, если он есть в выгрузке за другие периоды. Нулевая доля полноты тогда означает, что за последние 12 месяцев записей нет, и это нужно подтвердить у владельца канала.

Как отличить пропуск выгрузки от дня без продаж?

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

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

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

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

По теме

Все задачи