conson
Контакты
Все статьиИнженерия данных

Как сопоставить отчёты разных источников

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

Сначала определить, что означает строка

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

До объединения описывают объект учёта: единица товара, строка документа или итог за период. В терминологии Kimball это grain — то, что представляет одна строка фактов. От этого зависят допустимые связи и расчёты. Для общего отчёта сначала выбирают детализацию, которая действительно присутствует во всех нужных источниках.

Разделить чтение файла и сопоставление справочника

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

Frictionless Table Schema позволяет описывать поля, типы, ограничения, первичные и внешние ключи, а также маркеры пропусков. Такая схема делает правила чтения явными. Но корректно прочитанный код ещё нужно связать с сущностью: артикул партнёра может отличаться от внутреннего артикула. Если эти этапы разделены, смена формата файла не требует заново подтверждать все товарные соответствия.

Определить, что можно сравнивать

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

Различие источниковОснование для сравнения
Товары и категорииОбщая категория с согласованным составом
Штуки и упаковкиПодтверждённый коэффициент для конкретной позиции
Дневные и месячные данныеОдин календарный период и правило его закрытия
Продажи и отгрузкиРазные показатели либо явно описанный переход между ними

Это проектные решения для условного примера, а не автоматические преобразования. Если коэффициент упаковки неизвестен или категории пересекаются, часть данных остаётся несопоставимой. Такое ограничение сохраняют в отчёте вместе с доступными показателями.

От двух файлов к общему представлению · условные данные

Оба отчёта относятся к закрытому сентябрю, количество указано в штуках. Партнёр А передаёт товары, партнёр Б — категории. Соответствия A-01 и A-02 категории «Обувь» подтверждены; X-03 пока не сопоставлен.

Партнёр А · товары

АртикулШтуки
A-0112
A-028
X-034

Партнёр Б · категории

КатегорияШтуки
Обувь30

Согласованный уровень · категория за месяц

ИсточникОбувь, шт.Вне сопоставления
Партнёр А204 шт. · X-03
Партнёр Б30Нет

20 = 12 + 8. Ещё 4 штуки сохранены для разбора. Сравнение по отдельным артикулам между партнёрами невозможно: источник Б не содержит этих сведений.

Сопоставлять сущности с проверкой ошибок

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

В Record Linkage Toolkit процесс разделён на очистку, отбор пар, сравнение, классификацию и оценку. Такая последовательность помогает локализовать ошибку: нужный кандидат мог быть потерян ещё до сравнения. На размеченных парах отдельно считают ложные объединения и пропущенные совпадения; документация по оценке описывает precision и recall. Их приоритет зависит от последствий ошибки. Неоднозначные пары требуют разбора, а не случайного выбора первой записи.

Сохранять историю соответствий

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

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

Проверять результат объединения

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

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

Что подготовить для первого объединения

  1. По одному характерному файлу каждого формата. Добавьте период и пояснение, что означает строка.
  2. Известные соответствия. Артикулы, категории и единицы измерения, которые уже удалось согласовать.
  3. Общий вопрос к данным. Например, сравнить продажи категории за месяц. По нему выбирается допустимая детализация.
  4. Правила проверки. Что должно сойтись по каждому источнику и какие записи нужно сохранить отдельно для разбора.

Начать можно с одного периода и нескольких партнёров. Такой разбор покажет, какие различия устраняются правилами, а где нужно уточнение источника.

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

Обсудить сопоставление отчётов

Источники

  1. Kimball Group: GrainОпределение смысла строки фактов и согласованной детализации.
  2. Frictionless Data: Table SchemaТипы, ограничения, пропуски и ключи как явные правила чтения таблицы.
  3. Python Record Linkage Toolkit: AboutОчистка, индексирование кандидатов, сравнение, классификация и оценка.
  4. Python Record Linkage Toolkit: EvaluationЛожные и пропущенные совпадения; precision и recall для оценки сопоставления.
  5. Kimball Group: Type 2 — Add New RowХранение исторических версий атрибутов и сроков действия; пример для проектирования истории справочника.
  6. PostgreSQL: Table ExpressionsРазмножение результирующих строк при нескольких совпадениях в JOIN.

Проекты и инструменты

Обсудить вопрос в Russian BI Chat ↗Сообщество по BI и AI в Telegram

Настройки аналитики

Яндекс Метрика и Вебвизор помогают понять, откуда приходят посетители, какие страницы изучают и как взаимодействуют с сайтом.

Отключение не влияет на работу сайта. Выбор сохраняется в этом браузере на 180 дней. Подробнее об обработке данных.