Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Отчет по заказам - Тестовое задание

Описание

Решение тестового задания для позиции Junior аналитик. Проект включает генерацию тестовых данных, SQL выгрузку с дедупликацией и создание Excel отчета.

Требования

  • Python 3.11+
  • pip install pandas xlsxwriter

Структура

  • data/generate_data.py — генерация CSV (sellers.csv, orders.csv, order_items.csv)
  • sql/export.sql — SELECT с дедупликацией по external_id
  • py/build_report.py — сборка Excel
  • excel/Report.xlsx — итоговый отчёт (генерируется)

Команда для генерации данных:

python3 data/generate_data.py --email test@email.com --orders 1000 --days 90

Команда для сборки отчёта (бд в оперативной памяти):

python3 py/build_report.py --days 90 --out excel/Report.xlsx --db :memory:

Команда для сборки отчёта (если нужна бд)

python3 py/build_report.py --days 90 --out excel/Report2.xlsx --db data/report.sqlite

Что делает скрипт

  • Создаёт SQLite (in-memory по умолчанию), включает PRAGMA WAL/NORMAL.
  • Создаёт таблицы по схеме, загружает CSV executemany.
  • Применяет индексы:
    • orders(external_id), orders(date), orders(delivered_at), orders(updated_at), orders(seller_id)
    • order_items(order_id)
  • Выполняет sql/export.sql с параметром :days (окна SQLite), дедуп на уровне orders:
    • delivered_at IS NOT NULL ⇒ берём запись с максимальным delivered_at
    • иначе — с максимальным updated_at
  • Пишет Excel:
    • Orders — строки позиций (order_id × sku) + margin
    • Summary — агрегаты по channel и seller (revenue, cost, margin; число позиций; уникальные заказы)
    • Dashboard — графики: маржа по каналам; конверсия (paid/created, prod_started/paid, shipped/prod_started, delivered/shipped, delivered/created)
    • Checks — проблемные записи: qty ≤ 0; margin < 0; пропущенный seller/channel; дубли external_id (по разным order_id — ожидается 0)

Особенности данных

  • Встречаются qty ≤ 0 (около 1%), отрицательные маржи (~2%), seller_id вне справочника (~0.5%).
  • delivered_at в CSV пустой для недоставленных — при загрузке приводится к NULL.

Замечания по производительности

  • На 8k заказов/40k позиций всё работает мгновенно благодаря индексам:
    • orders(external_id) — ускоряет PARTITION BY + join по external_id
    • orders(date) — фильтр периода
    • orders(delivered_at), orders(updated_at) — сортировки в оконной функции
    • order_items(order_id) — join позиций

Промпты/ИИ

  • Анализ технического задания.
  • Оценка времени и сложности.
  • Автогенерация кода: sql/export.sql, py/build_report.py, правка data/generate_data.py.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages