- Зачем: начинающим трудно читать задания из-за необъясненных терминов и неестественных формулировок. - Что: переработаны вводная и 21 задание, названы темы разделов, объяснены термины и сокращены повторы; согласованы правила учебного текста и ссылки. - Проверка: сохранены 25 блоков SQL и команд и таблицы состава колонок; проверены 153 локальные ссылки и 32 входящие ссылки на разделы; git diff --check прошел.
85 lines
6.8 KiB
Markdown
85 lines
6.8 KiB
Markdown
# Почему повтор покупки завышает выручку
|
|
|
|
Несколько событий покупки могут относиться к одному заказу. Вы проверите,
|
|
как они завышают сумму, и составите расчет, который учитывает каждый заказ
|
|
один раз.
|
|
|
|
Факультатив доступен после ступени 1. Работайте в DBeaver пользователем
|
|
`analyst` по [инструкции](../../../README.md#подключиться-из-dbeaver).
|
|
Дождитесь завершения `etl_pipeline`; оставьте `world_live` на паузе и
|
|
дождитесь уже начатых прогонов, чтобы данные не менялись между запросами.
|
|
|
|
## Расчет по событиям покупки
|
|
|
|
В ODS уже устранены повторные доставки событий. Достаточно ли этого,
|
|
чтобы сложить суммы всех `purchase` для витрины заказов? Проверьте на данных.
|
|
|
|
Возьмите день, за который уже получены все слепки заказов: его дата должна быть не позднее
|
|
`max(snapshot_date) - 6` из `ods.order_v`. Во всех запросах к `dds.event_v`
|
|
отбирайте этот `event_date` и `event_type = 'purchase'`.
|
|
|
|
Номер заказа находится в `purchase_id[1]`, заявленная сумма — в
|
|
`purchase_revenue[1]`. По формату источника у события покупки один номер заказа.
|
|
|
|
Сначала посчитайте число событий и сумму всех заявленных сумм. Затем найдите
|
|
номера заказов, которые встречаются несколько раз. Если таких нет, выберите
|
|
другой день с полученными слепками.
|
|
|
|
Для двух повторившихся покупок выпишите `event_id`, `client_id`, `event_time`,
|
|
номер заказа и сумму. Сопоставьте число событий и заказов в `dds.order_v`.
|
|
|
|
## Расчет по заказам
|
|
|
|
Напишите запрос с одной строкой на номер заказа. Сохраните в результате
|
|
номер, число исходных событий и одну заявленную сумму. До выбора суммы
|
|
проверьте, что во всех событиях заказа она одинакова. Затем посчитайте итог
|
|
дня по результату этого запроса и сравните с расчетом по событиям.
|
|
|
|
Проверьте, что номера в результате уникальны, а число строк совпадает с числом
|
|
разных номеров в исходных событиях. Отдельно проверьте свое решение на случае
|
|
двух разных заказов с одинаковой суммой: сколько денег оно учтет?
|
|
|
|
## Заказы с повторными событиями
|
|
|
|
Возьмите один повторившийся номер заказа. Сколько денег он добавил в первый
|
|
расчет и сколько — во второй? Подтвердите разность его событиями.
|
|
|
|
Повторите расчет для остальных повторившихся номеров. Сохраните таблицу:
|
|
номер заказа, число событий и вклад в разность сумм. Проверьте, объясняют ли
|
|
эти заказы все расхождение за день до копейки.
|
|
|
|
Слой ODS убирает повторную доставку одного события по его идентификатору;
|
|
`dds.event_v` читает уже это состояние. Сравните число разных `event_id`
|
|
и число разных номеров заказа в выбранных строках. Почему устранение
|
|
повторов по первому ключу не дало тот же результат, что по второму?
|
|
Подтвердите ответ конкретными идентификаторами.
|
|
|
|
После собственного расчета найдите эти заказы в `dm.purchase_vs_orders_v`.
|
|
Если у повторившегося заказа класс отличается от `duplicate_event`, проверьте
|
|
его статус и [порядок присвоения классов](../../architecture/dm.md#dmpurchase_vs_orders_v).
|
|
Класс витрины не заменяет поиск всех повторов в событиях.
|
|
|
|
## Сравнение с выручкой магазина
|
|
|
|
Сложите `revenue` из `dm.revenue_daily_v` за тот же `report_date` по всем
|
|
категориям. Эта витрина считает стоимость позиций оплаченных заказов,
|
|
без скидки и доставки.
|
|
|
|
Сравните результат с суммой по событиям после устранения повторов. Совпадение не требуется:
|
|
удаление повторов устраняет одну причину расхождения. Найдите хотя бы один
|
|
заказ, который объясняет, почему деньги трекера и магазина все еще могут
|
|
различаться. Для этого сопоставьте события, заказ и готовую сверку.
|
|
|
|
Рядом с запросом укажите, чему соответствует одна строка результата
|
|
и какие поля ее определяют. Обоснуйте, где нужна одна строка на событие,
|
|
а где одна на заказ: следует ли ради этого расчета
|
|
удалять повторные покупки из `dds.event_v`? Используйте найденные `event_id`.
|
|
|
|
## Результат работы
|
|
|
|
- [ ] сохранен запрос с одной строкой на заказ, числом событий и суммой;
|
|
- [ ] уникальность ключа и полнота набора номеров проверены по источнику;
|
|
- [ ] разность сумм полностью объяснена вкладом лишних событий;
|
|
- [ ] обоснованы ключ расчета и место устранения повторов;
|
|
- [ ] найден случай, показывающий границы расчета денег по трекеру.
|