A metric is its definition
Write a metric so that two people get the same number: events, exclusions, window and time zone.
Lesson 3 of 32~25 min of learningIncludes ~15 min for questions and tasks
Contents1 of 40 steps
Maya
Theo
You
Alex Tutor
You
Alex Tutor
Question 1
“Active users on Wednesday” leaves several questions open. Which of these must a written definition answer? Select all that apply.
Alex Tutor
app_opened, not any event. Recurring bills are server-side events, so three users look active without touching their phones.settlement_id values, not rows.You
is_internal, didn't it?Alex Tutor
is_internal = true or acquisition_channel = staff. A rule that trusts a half-filled flag is still vague.Alex Tutor
Alex Tutor
Question 2
Match each part of a metric definition to its example from Halves.
Pick an answer for each row. Choosing an answer that is already used moves it to this row.
- Qualifying actionChoose an answer
- Unit countedChoose an answer
- ExclusionsChoose an answer
- Time windowChoose an answer
- Reporting time zoneChoose an answer
Maya
Alex Tutor
Alex Tutor
Dataset · 22 rows
Halves users, first week of June
All 22 accounts that have any event in the week of 1–7 June 2026.
- Columns
- user_id
- User id
- signup_date
- Sign-up date
- platform
- ios or android
- acquisition_channel
- Where the user came from; `staff` marks team accounts
- timezone
- The user's time zone
- is_internal
- Internal-account flag: true, false or empty (not always set)
Data
| user_id | signup_date | platform | acquisition_channel | timezone | is_internal |
|---|---|---|---|---|---|
| u001 | 2026-04-23 | ios | invite | Europe/Kyiv | false |
| u002 | 2026-02-10 | android | staff | Europe/Kyiv | |
| u003 | 2026-05-10 | ios | paid_social | Europe/Kyiv | false |
| u004 | 2026-05-22 | ios | paid_social | Europe/Kyiv | false |
| u005 | 2026-04-20 | android | app_store_search | Europe/Kyiv | false |
Show 17 more rows
| u006 | 2026-05-16 | ios | invite | Europe/Kyiv | false |
| u007 | 2026-05-08 | ios | referral_link | Asia/Bangkok | false |
| u008 | 2026-05-08 | ios | app_store_search | Asia/Bangkok | false |
| u009 | 2026-05-04 | ios | paid_social | Europe/Lisbon | false |
| u010 | 2026-05-29 | android | invite | America/New_York | false |
| u011 | 2026-05-28 | ios | invite | America/New_York | false |
| u012 | 2026-05-30 | android | invite | Asia/Bangkok | false |
| u013 | 2026-05-11 | ios | paid_social | Europe/Lisbon | false |
| u014 | 2026-05-30 | ios | referral_link | Europe/Kyiv | false |
| u015 | 2026-03-13 | android | invite | Europe/Kyiv | false |
| u016 | 2026-05-14 | ios | paid_social | Europe/Lisbon | false |
| u017 | 2026-06-01 | ios | paid_social | America/New_York | false |
| u018 | 2026-05-27 | ios | app_store_search | Asia/Bangkok | false |
| u019 | 2026-02-10 | ios | staff | Europe/Kyiv | true |
| u020 | 2026-05-06 | android | referral_link | Europe/Kyiv | false |
| u021 | 2026-05-12 | ios | app_store_search | Asia/Bangkok | false |
| u022 | 2026-05-11 | ios | app_store_search | Europe/Lisbon | false |
Alex Tutor
Dataset · 42 rows
Halves events, noon 2 June to noon 4 June (UTC)
42 events from the week's log. Times are UTC.
- Columns
- event_time
- When it happened, UTC
- user_id
- Who did it
- event
- Event name
- platform
- ios, android or server
- entry_method
- How an expense was entered
- amount_usd
- Amount in USD
- settlement_id
- Which settlement a settle-up belongs to
Data
| event_time | user_id | event | platform | entry_method | amount_usd | settlement_id |
|---|---|---|---|---|---|---|
| 2026-06-02T15:05:00Z | u018 | app_opened | ios | |||
| 2026-06-02T16:07:00Z | u014 | app_opened | ios | |||
| 2026-06-02T16:09:00Z | u014 | expense_added | ios | manual | 31 | |
| 2026-06-02T16:49:00Z | u004 | app_opened | ios | |||
| 2026-06-02T16:51:00Z | u004 | expense_added | ios | manual | 34 |
Show 37 more rows
| 2026-06-02T18:49:00Z | u014 | app_opened | ios | |||
| 2026-06-02T19:11:00Z | u004 | app_opened | ios | |||
| 2026-06-02T19:13:00Z | u004 | expense_added | ios | manual | 69 | |
| 2026-06-02T20:50:00Z | u020 | app_opened | android | |||
| 2026-06-02T23:10:00Z | u012 | app_opened | android | |||
| 2026-06-02T23:13:00Z | u012 | expense_added | android | manual | 19 | |
| 2026-06-02T23:14:00Z | u010 | app_opened | android | |||
| 2026-06-02T23:16:00Z | u010 | expense_added | android | receipt_scan | 8 | |
| 2026-06-03T02:30:00Z | u011 | app_opened | ios | |||
| 2026-06-03T02:33:00Z | u011 | expense_added | ios | manual | 89 | |
| 2026-06-03T07:14:00Z | u002 | app_opened | android | |||
| 2026-06-03T07:15:00Z | u002 | expense_added | android | manual | 1 | |
| 2026-06-03T07:53:00Z | u019 | app_opened | ios | |||
| 2026-06-03T07:54:00Z | u019 | expense_added | ios | manual | 1 | |
| 2026-06-03T09:19:00Z | u002 | app_opened | android | |||
| 2026-06-03T09:20:00Z | u002 | expense_added | android | manual | 1 | |
| 2026-06-03T09:37:00Z | u019 | app_opened | ios | |||
| 2026-06-03T09:38:00Z | u019 | expense_added | ios | manual | 1 | |
| 2026-06-03T10:02:00Z | u004 | app_opened | ios | |||
| 2026-06-03T10:04:00Z | u004 | expense_added | ios | manual | 105 | |
| 2026-06-03T10:07:00Z | u004 | settle_up_recorded | ios | 152 | s002 | |
| 2026-06-03T15:46:00Z | u018 | app_opened | ios | |||
| 2026-06-03T15:48:00Z | u018 | expense_added | ios | manual | 66 | |
| 2026-06-03T16:39:00Z | u021 | app_opened | ios | |||
| 2026-06-04T01:40:00Z | u017 | app_opened | ios | |||
| 2026-06-04T01:43:00Z | u017 | expense_added | ios | manual | 59 | |
| 2026-06-04T02:31:00Z | u008 | app_opened | ios | |||
| 2026-06-04T02:33:00Z | u008 | expense_added | ios | manual | 49 | |
| 2026-06-04T07:08:00Z | u019 | app_opened | ios | |||
| 2026-06-04T07:09:00Z | u019 | expense_added | ios | manual | 1 | |
| 2026-06-04T07:35:00Z | u002 | app_opened | android | |||
| 2026-06-04T07:36:00Z | u002 | expense_added | android | receipt_scan | 1 | |
| 2026-06-04T09:03:00Z | u002 | app_opened | android | |||
| 2026-06-04T09:04:00Z | u002 | expense_added | android | receipt_scan | 1 | |
| 2026-06-04T09:24:00Z | u019 | app_opened | ios | |||
| 2026-06-04T09:25:00Z | u019 | expense_added | ios | manual | 1 | |
| 2026-06-04T10:35:00Z | u020 | app_opened | android |
event_time. Keep only app_opened, drop the two staff accounts and count distinct user_id on 2026-06-03.You
Alex Tutor
Question 3
Use the two files above. How many real users (both staff accounts excluded) opened the app on 2026-06-03 by UTC date?
Units: users
Theo
Alex Tutor
event_time and take the date from the result.You
Alex Tutor
Alex Tutor
Question 4
Same files, same exclusions, but now the day is the user's local date (New York UTC−4, Lisbon UTC+1, Kyiv UTC+3, Bangkok UTC+7). How many real users opened the app on 3 June?
Units: users
Maya
Alex Tutor
Theo
Alex Tutor
Alex Tutor
Question 5
Theo has four weekly numbers for 1–7 June (UTC): 22, 19, 18 and 17. Which definition gives 17, the agreed weekly active users?
You
Alex Tutor
Maya
Alex Tutor
Alex Tutor
Question 6Short answer · AI-checked task
Write a complete definition of weekly settling users for Halves, in 3–6 lines. Cover the qualifying action, the unit counted, exclusions, the time window and the reporting time zone, and say what happens when both sides log the same settle-up.
Write your answer and get a score with feedback from our AI reviewer.
Log in to get AI feedbackAlex Tutor
That’s the lesson. You answered every task — nicely done.