101
0/304
Loading content...
A commerce analytics warehouse tracks user spend events in one table:
spending columns:
Data guarantees:
Daily bucket definition (computed per user and date):
Task:
Output requirements:
Supported submission environments:
spending:
| user_id | spend_date | platform | amount |
|---------|-------------|----------|--------|
| 1 | 2019-07-01 | mobile | 120 |
| 1 | 2019-07-01 | desktop | 80 |
| 2 | 2019-07-01 | mobile | 40 |
| 3 | 2019-07-01 | desktop | 60 |
| 2 | 2019-07-02 | mobile | 70 |
| 3 | 2019-07-02 | desktop | 30 |[
{"spend_date":"2019-07-01","platform":"desktop","total_amount":60,"total_users":1},
{"spend_date":"2019-07-01","platform":"mobile","total_amount":40,"total_users":1},
{"spend_date":"2019-07-01","platform":"both","total_amount":200,"total_users":1},
{"spend_date":"2019-07-02","platform":"desktop","total_amount":30,"total_users":1},
{"spend_date":"2019-07-02","platform":"mobile","total_amount":70,"total_users":1},
{"spend_date":"2019-07-02","platform":"both","total_amount":0,"total_users":0}
]On 2019-07-01, user 1 used both channels and contributes 200 to the both bucket. On 2019-07-02 there is no both user, so that row is still returned with zeros.
spending:
| user_id | spend_date | platform | amount |
|---------|-------------|----------|--------|
| 10 | 2020-03-10 | desktop | 300 |
| 11 | 2020-03-10 | desktop | 70 |
| 12 | 2020-03-10 | desktop | 30 |
| 10 | 2020-03-11 | mobile | 90 |
| 11 | 2020-03-11 | mobile | 60 |
| 12 | 2020-03-11 | desktop | 50 |
| 12 | 2020-03-11 | mobile | 150 |[
{"spend_date":"2020-03-10","platform":"desktop","total_amount":400,"total_users":3},
{"spend_date":"2020-03-10","platform":"mobile","total_amount":0,"total_users":0},
{"spend_date":"2020-03-10","platform":"both","total_amount":0,"total_users":0},
{"spend_date":"2020-03-11","platform":"desktop","total_amount":0,"total_users":0},
{"spend_date":"2020-03-11","platform":"mobile","total_amount":150,"total_users":2},
{"spend_date":"2020-03-11","platform":"both","total_amount":200,"total_users":1}
]A user's bucket is determined per day. User 12 is desktop-only on 2020-03-10, but both on 2020-03-11.
spending:
| user_id | spend_date | platform | amount |
|---------|-------------|----------|--------|
| 101 | 2021-12-01 | mobile | 25 |
| 102 | 2021-12-01 | desktop | 75 |
| 103 | 2021-12-02 | mobile | 20 |
| 103 | 2021-12-02 | desktop | 30 |
| 104 | 2021-12-02 | mobile | 45 |
| 105 | 2021-12-03 | desktop | 60 |[
{"spend_date":"2021-12-01","platform":"desktop","total_amount":75,"total_users":1},
{"spend_date":"2021-12-01","platform":"mobile","total_amount":25,"total_users":1},
{"spend_date":"2021-12-01","platform":"both","total_amount":0,"total_users":0},
{"spend_date":"2021-12-02","platform":"desktop","total_amount":0,"total_users":0},
{"spend_date":"2021-12-02","platform":"mobile","total_amount":45,"total_users":1},
{"spend_date":"2021-12-02","platform":"both","total_amount":50,"total_users":1},
{"spend_date":"2021-12-03","platform":"desktop","total_amount":60,"total_users":1},
{"spend_date":"2021-12-03","platform":"mobile","total_amount":0,"total_users":0},
{"spend_date":"2021-12-03","platform":"both","total_amount":0,"total_users":0}
]Every input date must produce three output rows. Missing buckets are explicitly represented with zeros.
Constraints