docs(labs): обращение «вы» во всех учебных заданиях

- Зачем:
  - README и путеводитель обращаются к читателю на «вы», а ТЗ в docs/labs/
    были на «ты»; после пересборки индекса смесь стала заметна.
- Что:
  - во всех восьми файлах docs/labs/ местоимения, глаголы и повелительное
    наклонение переведены во второе лицо множественного числа.
  - названия ступеней в таблице README оставлены как в спеке.
- Проверка:
  - grep по формам «ты/твой», 'ё' и 'менти' по docs/labs/ молчит;
    git diff --check чистый; ревью диффа свежей сессией.
This commit is contained in:
ddadmin committed 2026-09-03 17:28:51 -04:00
1 parent 830efa7ef4
commit 3556566f64
8 files changed
+79 -76

No files matched your search

+8 -8
View File
@@ -1,7 +1,7 @@
# Учебные задания # Учебные задания
Программа состоит из двух частей: основная включает семь ступеней, которые ты Программа состоит из двух частей: основная включает семь ступеней, которые вы
проходишь по порядку, а факультативы выбираешь по желанию. Причины такого проходите по порядку, а факультативы выбираете по желанию. Причины такого
порядка и формы заданий описаны в [программе учебных лаб](../specs/2026-09-01-labs-program.md#2-устройство-программы-основная-программа-и-факультативы). порядка и формы заданий описаны в [программе учебных лаб](../specs/2026-09-01-labs-program.md#2-устройство-программы-основная-программа-и-факультативы).
## Основная программа ## Основная программа
@@ -21,7 +21,7 @@
## Ступень 1: пять витрин слоя DM ## Ступень 1: пять витрин слоя DM
Слой DM в стенде построен наполовину: витрины трех сюжетов дашборда и контроль Слой DM в стенде построен наполовину: витрины трех сюжетов дашборда и контроль
качества уже построены, остальные пять витрин строишь ты. Каждая из них — качества уже построены, остальные пять витрин строите вы. Каждая из них —
самостоятельное ТЗ: в нем есть состав витрины, зерно, источники и способ самостоятельное ТЗ: в нем есть состав витрины, зерно, источники и способ
проверки. проверки.
@@ -59,7 +59,7 @@ DDS, и задания остаются независимыми. Исключе
остается обычным представлением. Довод — [дока DM](../architecture/dm.md), остается обычным представлением. Довод — [дока DM](../architecture/dm.md),
«Форма: по зерну, не по цене запроса». «Форма: по зерну, не по цене запроса».
**Ключ шардирования — твое решение.** Ни одно ТЗ ключа не называет. **Ключ шардирования — ваше решение.** Ни одно ТЗ ключа не называет.
Правило выбора и требование к донору — [дока Правило выбора и требование к донору — [дока
хранилища](../architecture/storage.md), «Раскладка по шардам»: донор хранилища](../architecture/storage.md), «Раскладка по шардам»: донор
объявляется через `AS <цель>_rep` и шардируется тем же ключом, что цель, объявляется через `AS <цель>_rep` и шардируется тем же ключом, что цель,
@@ -69,7 +69,7 @@ DDS, и задания остаются независимыми. Исключе
`dm.revenue_daily_dist` в [`sql/ddl/55-dm-tables.sql`](../../sql/ddl/55-dm-tables.sql). `dm.revenue_daily_dist` в [`sql/ddl/55-dm-tables.sql`](../../sql/ddl/55-dm-tables.sql).
**Где лежит код.** DDL домашек — свой файл `sql/ddl/70-labs.sql`: он **Где лежит код.** DDL домашек — свой файл `sql/ddl/70-labs.sql`: он
применяется после стендовых по порядку имени, и твои объекты не мешаются применяется после стендовых по порядку имени, и ваши объекты не мешаются
со стендовыми. У агрегатов рядом со стендовыми ложатся еще три запроса — со стендовыми. У агрегатов рядом со стендовыми ложатся еще три запроса —
`sql/dm/<витрина>_scope.sql` спрашивает у хранилища, какие дни пересобирает `sql/dm/<витрина>_scope.sql` спрашивает у хранилища, какие дни пересобирает
запуск, `_rebuild.sql` собирает их в донор, `_replace.sql` заменяет запуск, `_rebuild.sql` собирает их в донор, `_replace.sql` заменяет
@@ -106,14 +106,14 @@ DDS, и задания остаются независимыми. Исключе
**Предупреждение.** Запросы самой проверки лежат в `sql/dq/` открыто, и **Предупреждение.** Запросы самой проверки лежат в `sql/dq/` открыто, и
имена называют витрину и роль сверки. Проверка на инвариантах неизбежно имена называют витрину и роль сверки. Проверка на инвариантах неизбежно
близка к ответу: чтобы сверить витрину, надо ее пересчитать. Прятать эти близка к ответу: чтобы сверить витрину, надо ее пересчитать. Прятать эти
файлы никто не станет — но открыв их до того, как задание сделано, ты файлы никто не станет — но открыв их до того, как задание сделано, вы
обменяешь урок на готовый SQL. обменяете урок на готовый SQL.
Смотреть туда стоит после своей сборки: сравнить два решения полезно, Смотреть туда стоит после своей сборки: сравнить два решения полезно,
списать одно — нет. списать одно — нет.
## Факультативы ## Факультативы
Эти задания ты берешь по желанию. Полный список сюжетов — в разделе Эти задания вы берете по желанию. Полный список сюжетов — в разделе
[«Факультативы — пять разделов»](../specs/2026-09-01-labs-program.md#4-факультативы--пять-разделов) [«Факультативы — пять разделов»](../specs/2026-09-01-labs-program.md#4-факультативы--пять-разделов)
программы. программы.
+5 -5
View File
@@ -67,7 +67,7 @@
марта удалены. марта удалены.
Отсюда правило прогона: пересобираются **только те дни загрузки, которые Отсюда правило прогона: пересобираются **только те дни загрузки, которые
еще есть в источнике**. Спроси у источника список живых дней и замени еще есть в источнике**. Спросите у источника список живых дней и замените
партиции ровно этих дней. Соблазн «собрать все заново в донор и подменить партиции ровно этих дней. Соблазн «собрать все заново в донор и подменить
таблицу целиком» здесь стоит дороже обычного: истекшие по `TTL` дни исчезли таблицу целиком» здесь стоит дороже обычного: истекшие по `TTL` дни исчезли
бы из витрины навсегда, а вместе с ними — единственная оставшаяся память о бы из витрины навсегда, а вместе с ними — единственная оставшаяся память о
@@ -79,9 +79,9 @@
## Ключ шардирования ## Ключ шардирования
Твое решение по [правилу донора](../architecture/storage.md), «Раскладка по Ваше решение по [правилу донора](../architecture/storage.md), «Раскладка по
шардам». Витрина крошечная: классов брака у событий и заказов вместе меньше шардам». Витрина крошечная: классов брака у событий и заказов вместе меньше
десятка. Учти это в защите ключа — иногда правильный ответ звучит как десятка. Учтите это в защите ключа — иногда правильный ответ звучит как
«перекос здесь ничего не стоит, и вот почему». «перекос здесь ничего не стоит, и вот почему».
## Как проверить себя ## Как проверить себя
@@ -91,8 +91,8 @@
день за границей `TTL` сверять не с чем, и его отсутствие в источнике не день за границей `TTL` сверять не с чем, и его отсутствие в источнике не
ошибка. ошибка.
Собери прямой счет по обеим таблицам ошибок, соедини с Соберите прямой счет по обеим таблицам ошибок, соедините с
`dm.dq_errors_daily_v` полным внешним соединением по ключу и посчитай `dm.dq_errors_daily_v` полным внешним соединением по ключу и посчитайте
строки, где ключа нет с одной из сторон или где расходится `error_rows`. строки, где ключа нет с одной из сторон или где расходится `error_rows`.
Ноль — зеленый. Ноль — зеленый.
+4 -4
View File
@@ -91,10 +91,10 @@
## Как проверить себя ## Как проверить себя
Деловой ключ — `event_id` внутри дня. Собери прямой ответ из `dds.event_v` Деловой ключ — `event_id` внутри дня. Соберите прямой ответ из
за тот же день, соедини с витриной полным внешним соединением и посчитай `dds.event_v` за тот же день, соедините с витриной полным внешним
строки, где ключа нет с одной из сторон или где различаются значения соединением и посчитайте строки, где ключа нет с одной из сторон или где
деловых колонок. Ноль — зеленый. различаются значения деловых колонок. Ноль — зеленый.
Отдельно проверяются три производные колонки: `event_hour`, `page_path` и Отдельно проверяются три производные колонки: `event_hour`, `page_path` и
`referer_host` должны совпасть с тем же выражением, посчитанным по `referer_host` должны совпасть с тем же выражением, посчитанным по
+7 -7
View File
@@ -64,7 +64,7 @@ DDS уже перевел код источника в слово. Словар
С `visitors` история тоньше, и в ней главная ловушка задания. Складывать С `visitors` история тоньше, и в ней главная ловушка задания. Складывать
уникальных по строкам нельзя: один и тот же посетитель, попавший в две уникальных по строкам нельзя: один и тот же посетитель, попавший в две
строки, будет посчитан дважды. Проверь на стенде — и увидишь, что сумма строки, будет посчитан дважды. Проверьте на стенде — и увидите, что сумма
`visitors` по устройствам за день **сходится** с `dm.daily_traffic_v`. `visitors` по устройствам за день **сходится** с `dm.daily_traffic_v`.
Это не отменяет правила, а показывает, откуда берется совпадение: в мире Это не отменяет правила, а показывает, откуда берется совпадение: в мире
@@ -87,17 +87,17 @@ DDS уже перевел код источника в слово. Словар
## Ключ шардирования ## Ключ шардирования
Твое решение по [правилу донора](../architecture/storage.md), «Раскладка по Ваше решение по [правилу донора](../architecture/storage.md), «Раскладка по
шардам». Здесь у измерения всего три встречающихся значения, и распределены шардам». Здесь у измерения всего три встречающихся значения, и распределены
они неровно: планшеты — тонкая полоса, а телефоны и настольные машины держат они неровно: планшеты — тонкая полоса, а телефоны и настольные машины держат
основную массу. Прежде чем брать хеш от одного `device_category`, посчитай, основную массу. Прежде чем брать хеш от одного `device_category`, посчитайте,
сколько строк ляжет на каждый шард, и назови, чем тебя устраивает результат. сколько строк ляжет на каждый шард, и назовите, чем вас устраивает результат.
## Как проверить себя ## Как проверить себя
Деловой ключ — `device_category` внутри дня. Собери прямой агрегат из Деловой ключ — `device_category` внутри дня. Соберите прямой агрегат из
`dds.session_v` за день, соедини с `dm.session_overview_v` полным внешним `dds.session_v` за день, соедините с `dm.session_overview_v` полным внешним
соединением и посчитай строки, где ключа нет с одной из сторон или где соединением и посчитайте строки, где ключа нет с одной из сторон или где
расходится любой счетчик. Ноль — зеленый. расходится любой счетчик. Ноль — зеленый.
Две проверки покрупнее ловят грубую ошибку сразу: Две проверки покрупнее ловят грубую ошибку сразу:
+24 -23
View File
@@ -10,20 +10,20 @@
## Роль графика ## Роль графика
В задании 3 ты собрал витрину `dm.session_overview_v`. Теперь покажи, с каких В задании 3 вы собрали витрину `dm.session_overview_v`. Теперь покажите, с
устройств чаще уходят после первой страницы. Построй столбиковый график доли каких устройств чаще уходят после первой страницы. Постройте столбиковый
отказов по `device_category` за весь период витрины. Измерение одно — график доли отказов по `device_category` за весь период витрины. Измерение
`device_category`, метрика тоже одна. одно — `device_category`, метрика тоже одна.
## Что сделать ## Что сделать
Заведи физический датасет в подключении к `ClickHouse`: схема `dm`, объект Заведите физический датасет в подключении к `ClickHouse`: схема `dm`, объект
`session_overview_v`. Назови по-русски хотя бы две колонки: `session_overview_v`. Назовите по-русски хотя бы две колонки:
- `device_category` — «Категория устройства»; - `device_category` — «Категория устройства»;
- `report_date` — «Дата отчета». - `report_date` — «Дата отчета».
В редакторе датасета, на вкладке «Metrics», создай метрику: В редакторе датасета, на вкладке «Metrics», создайте метрику:
| Поле | Значение | | Поле | Значение |
|---|---| |---|---|
@@ -33,35 +33,35 @@
| `D3 format` | `.1%` | | `D3 format` | `.1%` |
Доля считается из сумм слагаемых: среднее готовых долей соврет. Поэтому Доля считается из сумм слагаемых: среднее готовых долей соврет. Поэтому
метрике нужно это выражение. Сохрани ее в датасете, а не в графике: подписи и метрике нужно это выражение. Сохраните ее в датасете, а не в графике:
формат задаются в датасете, а график их использует. Так во всех будущих подписи и формат задаются в датасете, а график их использует. Так во всех
графиках у метрики будут одинаковые подписи. Это правило описано в будущих графиках у метрики будут одинаковые подписи. Это правило описано в
[справочнике Superset](../architecture/superset.md#дерево-импорта). [справочнике Superset](../architecture/superset.md#дерево-импорта).
Не используй вкладку «Custom SQL» конструктора графика. Созданная там метрика Не используйте вкладку «Custom SQL» конструктора графика. Созданная там
доступна только этому графику, а нужна метрика датасета. метрика доступна только этому графику, а нужна метрика датасета.
Создай столбиковый график с метрикой «Доля отказов». В поле «X-axis» укажи Создайте столбиковый график с метрикой «Доля отказов». В поле «X-axis»
«Категория устройства», а «Dimensions» не заполняй. Дашборд создавать не укажите «Категория устройства», а «Dimensions» не заполняйте. Дашборд
нужно: сохраненного графика достаточно. создавать не нужно: сохраненного графика достаточно.
По умолчанию в графике выбран период «No filter». Оставь его таким или задай По умолчанию в графике выбран период «No filter». Оставьте его таким или
явные даты. Относительный период, например «Last week», даст пустой задайте явные даты. Относительный период, например «Last week», даст пустой
график: модельный календарь стенда отстает от настоящего. Последнюю дату график: модельный календарь стенда отстает от настоящего. Последнюю дату
витрины посмотри в SQL Lab: витрины посмотрите в SQL Lab:
```sql ```sql
SELECT max(report_date) SELECT max(report_date)
FROM dm.session_overview_v; FROM dm.session_overview_v;
``` ```
Стендовые объекты не меняй. Что переживает `make up`, а что стирает Стендовые объекты не меняйте. Что переживает `make up`, а что стирает
`make clean`, описано в главе [«Немного Superset»](../handbook/superset.md#стендовые-объекты-и-ваши). `make clean`, описано в главе [«Немного Superset»](../handbook/superset.md#стендовые-объекты-и-ваши).
## Как проверить себя ## Как проверить себя
График проверяется глазами, поэтому задачи для него в `homework_check` нет. График проверяется глазами, поэтому задачи для него в `homework_check` нет.
В SQL Lab выполни запрос: В SQL Lab выполните запрос:
```sql ```sql
SELECT device_category, SELECT device_category,
@@ -71,9 +71,10 @@ GROUP BY device_category
ORDER BY device_category; ORDER BY device_category;
``` ```
Сверь с графиком значение для каждой категории. В разделе «Customize» включи Сверьте с графиком значение для каждой категории. В разделе «Customize»
«Show Value» или наведи указатель на столбик. Запрос возвращает проценты с одним знаком, включите «Show Value» или наведите указатель на столбик. Запрос возвращает
как формат `.1%`, поэтому числа должны совпасть один в один. проценты с одним знаком, как формат `.1%`, поэтому числа должны совпасть
один в один.
## Приемка ## Приемка
+17 -15
View File
@@ -9,30 +9,31 @@
## Роль дашборда ## Роль дашборда
Собери обзор трафика и поведения посетителей. Он должен отвечать на три Соберите обзор трафика и поведения посетителей. Он должен отвечать на три
вопроса: что происходило в магазине, какие страницы, устройства и рекламные вопроса: что происходило в магазине, какие страницы, устройства и рекламные
каналы дали результат, были ли ошибки приема данных. каналы дали результат, были ли ошибки приема данных.
Стендовый дашборд «Бизнес-сюжеты» собран из готовых витрин. Свой дашборд Стендовый дашборд «Бизнес-сюжеты» собран из готовых витрин. Свой дашборд
собери из пяти витрин, которые ты построил в заданиях. Копировать раскладку соберите из пяти витрин, которые вы построили в заданиях. Копировать раскладку
стендового дашборда не нужно: выбери форму, в которой ответы читаются без стендового дашборда не нужно: выберите форму, в которой ответы читаются без
пояснений рядом с экраном. пояснений рядом с экраном.
## Свои объекты — отдельно ## Свои объекты — отдельно
Не добавляй графики в стендовый дашборд и не правь его датасеты. При Не добавляйте графики в стендовый дашборд и не правьте его датасеты. При
инициализации Superset импорт с `--overwrite` заменит ручные правки стендовых инициализации Superset импорт с `--overwrite` заменит ручные правки стендовых
объектов файлами из репозитория. `make up` свой дашборд не стирает; срок жизни объектов файлами из репозитория. `make up` свой дашборд не стирает; срок жизни
таких объектов описан в [доке Superset](../architecture/superset.md), «Импорт таких объектов описан в [доке Superset](../architecture/superset.md), «Импорт
при каждой инициализации». при каждой инициализации».
Заведи отдельные датасеты и графики, собери из них свой дашборд. Назови его, Заведите отдельные датасеты и графики, соберите из них свой дашборд.
например, «Мои витрины DM». Это то же правило, по которому DDL домашек лежит Назовите его, например, «Мои витрины DM». Это то же правило, по которому DDL
в `sql/ddl/70-labs.sql`: стендовые объекты уже есть, свои создаешь ты. домашек лежит в `sql/ddl/70-labs.sql`: стендовые объекты уже есть, свои
создаете вы.
## Датасеты ## Датасеты
Заведи в подключении `ClickHouse` пять физических датасетов схемы `dm`: Заведите в подключении `ClickHouse` пять физических датасетов схемы `dm`:
- `events_enriched_v`; - `events_enriched_v`;
- `top_pages_daily_v`; - `top_pages_daily_v`;
@@ -43,7 +44,7 @@
## Состав дашборда ## Состав дашборда
Каждая из пяти витрин должна появиться хотя бы в одном графике. Точный тип Каждая из пяти витрин должна появиться хотя бы в одном графике. Точный тип
графика выбери сам. На дашборде покажи следующее: графика выберите сами. На дашборде покажите следующее:
| Витрина | Что показать | | Витрина | Что показать |
|---|---| |---|---|
@@ -53,7 +54,7 @@
| `dq_errors_daily_v` | число ошибок по дню загрузки, источнику и классу | | `dq_errors_daily_v` | число ошибок по дню загрузки, источнику и классу |
| `utm_effectiveness_v` | трафик, покупки и заявленную выручку по рекламным каналам | | `utm_effectiveness_v` | трафик, покупки и заявленную выручку по рекламным каналам |
Для долей используй слагаемые из витрин. Например, доля отказов считается Для долей используйте слагаемые из витрин. Например, доля отказов считается
как сумма `bounce_sessions`, деленная на сумму `sessions`. Среднее по готовым как сумма `bounce_sessions`, деленная на сумму `sessions`. Среднее по готовым
долям для такого графика не подходит — урок задания 3 остается в силе. долям для такого графика не подходит — урок задания 3 остается в силе.
@@ -64,19 +65,20 @@
Эта лаба проверяется глазами. У расположения панелей и понятных подписей нет Эта лаба проверяется глазами. У расположения панелей и понятных подписей нет
счетного инварианта, поэтому задачи для нее в `homework_check` нет. счетного инварианта, поэтому задачи для нее в `homework_check` нет.
Открой список дашбордов и проверь: Откройте список дашбордов и проверьте:
- «Бизнес-сюжеты» остался отдельным стендовым дашбордом; - «Бизнес-сюжеты» остался отдельным стендовым дашбордом;
- твой дашборд открывается без ошибок и содержит график от каждого из пяти - ваш дашборд открывается без ошибок и содержит график от каждого из пяти
датасетов; датасетов;
- подписи, единицы измерения и легенды читаются без обращения к SQL; - подписи, единицы измерения и легенды читаются без обращения к SQL;
- прямой трафик не исчез из графика UTM, а заявленная выручка не выдана за - прямой трафик не исчез из графика UTM, а заявленная выручка не выдана за
серверную; серверную;
- пустой график ошибок нормален, если в таблицах брака сейчас нет строк. - пустой график ошибок нормален, если в таблицах брака сейчас нет строк.
Последний проход сделай как читатель: найди на экране самый заметный канал, Последний проход сделайте как читатель: найдите на экране самый заметный
страницу и устройство, затем проверь, понятно ли из подписей, что именно канал, страницу и устройство, затем проверьте, понятно ли из подписей, что
сравнивается. Если ответ приходится угадывать, поправь график или его название. именно сравнивается. Если ответ приходится угадывать, поправьте график или
его название.
## Приемка ## Приемка
+7 -7
View File
@@ -64,7 +64,7 @@
пересобирать нужно только то, что еще не собрано: хвост дней, которых в пересобирать нужно только то, что еще не собрано: хвост дней, которых в
витрине нет, — от первого несобранного прожитого дня до последнего витрине нет, — от первого несобранного прожитого дня до последнего
прожитого. Готовые дни трогать незачем, а вот дыру, оставленную частичным прожитого. Готовые дни трогать незачем, а вот дыру, оставленную частичным
отказом, объем прогона обязан подобрать: ищи не последний собранный день, а отказом, объем прогона обязан подобрать: ищите не последний собранный день, а
первый несобранный. первый несобранный.
Механика — сборка отрезка в донор одной вставкой и замена дневных партиций Механика — сборка отрезка в донор одной вставкой и замена дневных партиций
@@ -72,16 +72,16 @@
## Ключ шардирования ## Ключ шардирования
Твое решение по [правилу донора](../architecture/storage.md), «Раскладка по Ваше решение по [правилу донора](../architecture/storage.md), «Раскладка по
шардам». Подумай, чем эта витрина отличается от `revenue_daily`: там кроме шардам». Подумайте, чем эта витрина отличается от `revenue_daily`: там кроме
дня было одно измерение из шести близких по объему значений, здесь — дня было одно измерение из шести близких по объему значений, здесь —
страницы, которых много и которые по популярности очень неровные. страницы, которых много и которые по популярности очень неровные.
## Как проверить себя ## Как проверить себя
Деловой ключ — `page_path` внутри дня. Собери прямой агрегат из Деловой ключ — `page_path` внутри дня. Соберите прямой агрегат из
`dds.event_v` за день, соедини с `dm.top_pages_daily_v` полным внешним `dds.event_v` за день, соедините с `dm.top_pages_daily_v` полным внешним
соединением по ключу и посчитай строки, где ключа нет с одной из сторон или соединением по ключу и посчитайте строки, где ключа нет с одной из сторон или
где расходится любой из четырех счетчиков. Ноль — зеленый. где расходится любой из четырех счетчиков. Ноль — зеленый.
Две проверки попроще, ими удобно ловить грубую ошибку до полного Две проверки попроще, ими удобно ловить грубую ошибку до полного
@@ -94,7 +94,7 @@
Проверки ловят разное. Фильтр `WHERE event_type = 'pageview'` первая из них Проверки ловят разное. Фильтр `WHERE event_type = 'pageview'` первая из них
пропускает: отбор строк по типу не меняет счет событий того же типа. пропускает: отбор строк по типу не меняет счет событий того же типа.
Расхождение покажет только вторая — вместе с `cart_adds` обнулятся и Расхождение покажет только вторая — вместе с `cart_adds` обнулятся и
`purchases`. Проверку выбирают по тому, умеет ли она покраснеть на твоей `purchases`. Проверку выбирают по тому, умеет ли она покраснеть на вашей
ошибке, а не по тому, как быстро она пишется: [проверка, которая не умеет ошибке, а не по тому, как быстро она пишется: [проверка, которая не умеет
краснеть, бесполезна](../architecture/testing.md). краснеть, бесполезна](../architecture/testing.md).
+7 -7
View File
@@ -88,21 +88,21 @@ UTM у бэкенда нет, метки живут только в кликст
## Ключ шардирования ## Ключ шардирования
Твое решение по [правилу донора](../architecture/storage.md), «Раскладка по Ваше решение по [правилу донора](../architecture/storage.md), «Раскладка по
шардам». Зерно здесь составное, из трех колонок, и решение «взять хеш от шардам». Зерно здесь составное, из трех колонок, и решение «взять хеш от
одной из них» надо защищать отдельно: назови, какая доля строк придется на одной из них» надо защищать отдельно: назовите, какая доля строк придется на
самое частое значение выбранной колонки. самое частое значение выбранной колонки.
## Конфликт, ради которого витрина и написана ## Конфликт, ради которого витрина и написана
Собери за один и тот же день две суммы: `sum(declared_revenue)` из своей Соберите за один и тот же день две суммы: `sum(declared_revenue)` из своей
витрины и `sum(revenue)` из `dm.revenue_daily_v`. Они не сойдутся, и это витрины и `sum(revenue)` из `dm.revenue_daily_v`. Они не сойдутся, и это
верное поведение обеих витрин. верное поведение обеих витрин.
Базы у двух сумм при этом сравнимые: `revenue_daily` складывает цену позиций Базы у двух сумм при этом сравнимые: `revenue_daily` складывает цену позиций
на количество и ни скидки, ни доставки в себя не берет — ровно то, что видит на количество и ни скидки, ни доставки в себя не берет — ровно то, что видит
клиент. Значит все расхождение до копейки объясняется тем, что случилось с клиент. Значит все расхождение до копейки объясняется тем, что случилось с
заказом, а не тем, как считали деньги. Ищи ответы среди таких причин: заказом, а не тем, как считали деньги. Ищите ответы среди таких причин:
- отмененный заказ из кликстрима никуда не девается: событие покупки - отмененный заказ из кликстрима никуда не девается: событие покупки
случилось, а `revenue_daily` считает только оплаченные; случилось, а `revenue_daily` считает только оплаченные;
@@ -113,7 +113,7 @@ UTM у бэкенда нет, метки живут только в кликст
Как эти же расхождения выглядят на зерне заказа, показывает стендовая Как эти же расхождения выглядят на зерне заказа, показывает стендовая
витрина `dm.purchase_vs_orders_v` с ее классами расхождений: это готовый витрина `dm.purchase_vs_orders_v` с ее классами расхождений: это готовый
ответ на вопрос «а сколько именно и из-за чего». Запиши свой вывод — ответ на вопрос «а сколько именно и из-за чего». Запишите свой вывод —
в двух-трех фразах, своими словами. в двух-трех фразах, своими словами.
Проверять сходимость этих двух сумм не нужно и нельзя: они и не должны Проверять сходимость этих двух сумм не нужно и нельзя: они и не должны
@@ -122,8 +122,8 @@ UTM у бэкенда нет, метки живут только в кликст
## Как проверить себя ## Как проверить себя
Деловой ключ — тройка `utm_source`, `utm_medium`, `utm_campaign` внутри Деловой ключ — тройка `utm_source`, `utm_medium`, `utm_campaign` внутри
дня. Собери прямой агрегат из `dds.event_v` за день, соедини с дня. Соберите прямой агрегат из `dds.event_v` за день, соедините с
`dm.utm_effectiveness_v` полным внешним соединением и посчитай строки, где `dm.utm_effectiveness_v` полным внешним соединением и посчитайте строки, где
ключа нет с одной из сторон или где расходится любая из пяти величин. Ноль — ключа нет с одной из сторон или где расходится любая из пяти величин. Ноль —
зеленый. зеленый.