# Визначення метрики: одне правило, одне число

> Як записати визначення продуктової метрики, щоб двоє отримали те саме число: цільова подія, одиниця, винятки, вікно й часовий пояс — на прикладі DAU.

- Курс: [Продуктова аналітика: від даних до рішень](https://productovi.com/uk/courses/product-analytics.md)
- Модуль: Що саме ми вимірюємо?
- Урок 3/32, ~31 хв
- Джерело: https://productovi.com/uk/courses/product-analytics/metric-definitions

## Два DAU за одну середу

**Alex Tutor:** У Halves двоє колег приносять тобі одне питання з різними відповідями. Відповідати даними — твоя робота.

**Maya:** Коротке питання для четвергового апдейту: скільки активних користувачів було в Halves у середу, 3 червня? Мій дашборд показує **6**.

**Theo:** А мій — **7**. Той самий застосунок, та сама середа. Хотілося б знати, яке з них іде на раду директорів.

**Sofia:** Мабуть, в одному із запитів помилка. Шукати, в чиєму?

**Alex Tutor:** Швидше за все, помилки немає в жодному. Вони відповіли на два різні питання з однаковою назвою. «Активні користувачі в середу» звучить точно, але це назва, а не визначення метрики.

**Alex Tutor:** Дашборд Maya рахує всіх, хто має будь-яку подію в цю дату за UTC. Таблиця Theo рахує відкриття застосунку за місцевою датою кожного користувача. Акаунти команди не прибирає жоден.

![Двоє колег міряють ту саму посилку: один дерев'яною лінійкою, інший рулеткою, і спантеличено дивляться одне на одного.](https://productovi.com/courses/product-analytics/inline/metric-definitions-illustration-2.webp)

*Одна назва, різні правила: два чесні підрахунки, які не можуть збігтися.*

**Sofia:** Тобто перш ніж питати, хто правий, треба з'ясувати, що саме рахував кожен.

> **Вправа:** «Активні користувачі в середу» залишає кілька питань відкритими. На які з них має відповісти записане визначення? Вибери усі правильні варіанти.

## Що містить визначення метрики: п'ять частин

**Alex Tutor:** **Визначення метрики** (metric definition), яке неможливо прочитати по-різному, має п'ять частин. Так записують будь-яку продуктову метрику, від DAU до розрахунків. У кожній частині ховається пастка, яку ми вже бачили в даних Halves.

**Alex Tutor:** **1. Цільова дія (qualifying action):** яка подія зараховує людину. Для «активних» беремо `app_opened`, а не будь-яку подію. Регулярні рахунки — це **серверні події** (server-side events), тож троє користувачів виглядають активними, навіть не взявши телефон до рук.

**Alex Tutor:** **2. Одиниця підрахунку (unit counted):** унікальні користувачі, групи чи розрахунки. Розрахунок записують обидві сторони, тож розрахунки — це унікальні значення `settlement_id`, а не рядки.

**Alex Tutor:** **3. Винятки (exclusions):** акаунти співробітників, QA і тестові. **4. Часове вікно (time window):** день, сім днів чи місяць, з точним початком і кінцем. **5. Часовий пояс звітності (reporting time zone):** чий годинник визначає дату — UTC чи користувача.

![Довгий чек, затиснутий на планшеті, з п'ятьма значками збоку: рука, що торкається, людина, перекреслений бейдж, пісочний годинник і глобус.](https://productovi.com/courses/product-analytics/inline/metric-definitions-illustration-3.webp)

*П'ять частин дають визначення метрики, яке неможливо прочитати двома способами.*

**Sofia:** До речі, про команду: в одного QA-акаунта `is_internal` був порожній, так?

**Alex Tutor:** Так, u002. Тому правило каже, як знайти команду: `is_internal = true` **або** `acquisition_channel = staff`. Правило, яке покладається на наполовину заповнену позначку, досі розмите.

> **Шаблон визначення**
>
> **Назва:** щоденні активні користувачі (DAU)
>
> - **Цільова дія:** `app_opened`
> - **Одиниця підрахунку:** унікальні `user_id`
> - **Винятки:** `is_internal = true` або `acquisition_channel = staff`
> - **Часове вікно:** одна календарна доба, з 00:00 до 23:59
> - **Часовий пояс звітності:** UTC

> **Вправа:** Зістав кожну частину визначення метрики з прикладом із Halves.

**Alex Tutor:** Часове вікно здається найпростішою частиною, і саме в ньому команди найтихіше помиляються. Спробуй ось це.

> **Вправа:** Maya хоче в четвер бачити щотижневих активних користувачів за тиждень 1–7 червня. Яке часове вікно має бути у визначенні?

## Перераховуємо середу за UTC

**Maya:** Гаразд, виправляймо. Справжні люди, застосунок відкрито, середа, 3 червня. Яке число?

**Alex Tutor:** Два файли. У таблиці користувачів є часовий пояс кожного і позначки команди. Журнал подій обрізано до проміжку від полудня 2 червня до полудня 4 червня за UTC: він охоплює середу в усіх часових поясах, де живуть наші користувачі.

**Набір даних (CSV):** [Користувачі Halves, перший тиждень червня](https://productovi.com/datasets/product-analytics/metric-definitions/halves-users-week-1.csv)

Усі 22 акаунти, що мають хоча б одну подію за тиждень 1–7 червня 2026 року.

- `user_id`: Ідентифікатор користувача
- `signup_date`: Дата реєстрації
- `platform`: ios або android
- `acquisition_channel`: Звідки прийшов користувач; `staff` позначає акаунти команди
- `timezone`: Часовий пояс користувача
- `is_internal`: Позначка внутрішнього акаунта: true, false або порожньо (заповнена не завжди)

**Набір даних (CSV):** [Події Halves, від полудня 2 червня до полудня 4 червня (UTC)](https://productovi.com/datasets/product-analytics/metric-definitions/halves-events-2-4-june.csv)

42 події з тижневого журналу. Час — за UTC.

- `event_time`: Коли сталося, за UTC
- `user_id`: Хто це зробив
- `event`: Назва події
- `platform`: ios, android або server
- `entry_method`: Як внесли витрату
- `amount_usd`: Сума в USD
- `settlement_id`: До якого розрахунку належить подія

**Alex Tutor:** Почнімо з UTC, тобто з дати, як вона записана в `event_time`. Залишаємо тільки `app_opened`, прибираємо два акаунти команди й рахуємо унікальні `user_id` за 2026-06-03.

**Sofia:** Унікальні, отже той, хто відкрив застосунок двічі, рахується один раз.

> **Вправа:** Усі події `app_opened`, які Halves записав від 20:00 2 червня до 04:00 4 червня (UTC):
>
> | event_time (UTC) | user_id |
> |---|---|
> | 2026-06-02 20:50 | u020 |
> | 2026-06-02 23:10 | u012 |
> | 2026-06-02 23:14 | u010 |
> | 2026-06-03 02:30 | u011 |
> | 2026-06-03 07:14 | u002 |
> | 2026-06-03 07:53 | u019 |
> | 2026-06-03 09:19 | u002 |
> | 2026-06-03 09:37 | u019 |
> | 2026-06-03 10:02 | u004 |
> | 2026-06-03 15:46 | u018 |
> | 2026-06-03 16:39 | u021 |
> | 2026-06-04 01:40 | u017 |
> | 2026-06-04 02:31 | u008 |
>
> Два з цих акаунтів належать команді: u002 (`acquisition_channel = staff`, `is_internal` порожнє) і u019 (`is_internal = true`). Скільки справжніх користувачів (без обох акаунтів команди) відкрили застосунок 2026-06-03 за **датою UTC**?

## Та сама середа за годинником користувача

**Theo:** Моя реклама працює окремо для кожної країни, тож я читаю дні так, як їх проживають люди. Людина в Нью-Йорку, яка відкрила застосунок у вівторок о 22:00, для мене — користувач вівторка.

**Alex Tutor:** Цілком слушний вибір. У червні Нью-Йорк — це UTC−4, Лісабон — UTC+1, Київ — UTC+3, Бангкок — UTC+7. Додаємо зсув до `event_time` і беремо дату з результату.

**Sofia:** Тобто пізнє вечірнє відкриття за UTC у Бангкоку — це вже наступний ранок?

**Alex Tutor:** Так, а раннє ранкове відкриття за UTC у Нью-Йорку — це ще попередній вечір. Саме тут мандрівники цього тижня переходять з одного дня в інший.

![Глобус, оточений годинниками з різним часом, наполовину в нічній тіні; мандрівник із валізою переходить із ночі в ранок.](https://productovi.com/courses/product-analytics/inline/metric-definitions-illustration-4.webp)

*Та сама мить може припасти на різні дати на різних годинниках.*

> **Вправа:** Скористайся файлом користувачів і логом подій, прибери акаунти команди u002 і u019 і визначай день за **місцевою датою користувача** (Нью-Йорк UTC−4, Лісабон UTC+1, Київ UTC+3, Бангкок UTC+7). Скільки справжніх користувачів відкрили застосунок 3 червня?

**Alex Tutor:** Перш ніж звинувачувати чийсь запит, відтвори число 6 від Maya з файлу. Почни з того, що насправді переглянув її дашборд.

> **Вправа:** Дашборд Maya рахує **будь-яку подію** за **датою UTC** і **нікого не виключає**. Скільки рядків подій у файлі мають дату 2026-06-03 за UTC? (Її 6 користувачів беруться саме з цих рядків.)

## UTC чи місцевий час: який DAU показувати?

**Maya:** Отже, 4 або 5. Що з цього йде в апдейт?

**Alex Tutor:** Будь-яке з двох, якщо правило записане поруч із числом і ніколи не змінюється потихеньку. Більшість команд звітують за UTC, щоб усі графіки ділили дні однаково. Місцеві дні підходять для питань про щоденні звички.

**Alex Tutor:** Довіру руйнує 6 на одному слайді й 7 на наступному. До того ж обидва ці числа враховували ще й команду QA.

**Theo:** Тоді з тижнем та сама історія. Я бачив 22, 19, 18 і 17 щотижневих активних користувачів за 1–7 червня.

**Alex Tutor:** Чотири визначення, чотири числа. Лише одне з них — наше правило для DAU, розтягнуте на тиждень.

> **Вправа:** Theo має чотири тижневі числа за 1–7 червня (UTC): 22, 19, 18 і 17. Яке визначення дає **17** — узгоджену кількість щотижневих активних користувачів?

**Alex Tutor:** Ще одна пастка, цього разу про час, а не про підрахунок: що буде, якщо хтось покращить визначення посеред кварталу?

> **Вправа:** **Правда чи ні:** Halves може з 1 липня перейти в DAU з дат UTC на місцеві дати, і графік DAU за рік лишиться порівнянним, якщо нове правило записати у визначенні.

## Де записувати визначення метрик

**Sofia:** Де має жити визначення, щоб Maya не питала нас щочетверга?

**Alex Tutor:** Під графіком як підпис і в **плані трекінгу** (tracking plan) — документі, де перелічено, що ми логуємо і навіщо. Це тема наступного уроку. Правило на сьогодні: жодного числа без записаного визначення.

**Maya:** Тоді хочу таке ж для розрахунків. Скільки людей щотижня справді повертають борги?

**Alex Tutor:** Добра перевірка. Запиши його з усіма п'ятьма частинами й виріши, що робити, коли той самий розрахунок записують обидві сторони.

> **Вправа:** Запиши повне визначення метрики **щотижневі користувачі, що розраховуються** (weekly settling users) для Halves у 3–6 рядках. Охопи цільову дію, одиницю підрахунку, винятки, часове вікно й часовий пояс звітності та поясни, що відбувається, коли той самий розрахунок записують обидві сторони.

**Alex Tutor:** Отже, середа: за датою UTC 3 червня Halves відкрили 4 справжні користувачі, за місцевою — 5. Обидва числа правильні. Марне лише число без визначення.

- Попередній урок: [Загальна кількість, унікальні користувачі й пастки підрахунку](https://productovi.com/uk/courses/product-analytics/counting-traps.md)
- Наступний урок: [План трекінгу для нової фічі](https://productovi.com/uk/courses/product-analytics/tracking-plan.md)

---
Productovi Learning. Безкоштовно, читати можна без реєстрації.
