BigQuery: Как провести анализ когорт / сохранности для базы пользователей через 2,5 года? - PullRequest
0 голосов
/ 26 июня 2019

Меня попросили выполнить анализ когорт / сохранности для задания для более чем 50 000 пользователей для приложения на основе покупок в течение 2,5 лет.

У меня есть две таблицы, на которые я могу сослаться. Одна таблица с указанием user_id и даты регистрации аккаунта (в формате TIMESTAMP). В другой таблице показаны покупки, сделанные пользователями в приложении, с каждой покупкой, связанной с TIMESTAMP.

Как именно я напишу запрос для проведения такого анализа? Я рассмотрел некоторые примеры на StackOverflow, Reddit и других форумах, и многие из них приведены только для одного месяца или нескольких недель регистрации пользователей, в отличие от нескольких лет, когда новые пользователи регистрировались каждый месяц в течение двух лет.

Таблица 1

-временная отметка TIMESTAMP

-user_id БАЙТОВ

Таблица 2

-user_id БАЙТОВ

-account_signup TIMESTAMP

1 Ответ

0 голосов
/ 27 июня 2019

В следующем запросе показано 30-дневное удержание по месяцам, которое отвечает на вопрос: «Для всех пользователей, которые зарегистрировались в течение месяца, сколько человек совершило покупку через 30 дней после регистрации в аккаунте?»

with user_signups as (
  select user_id, cast(account_signup as date) as account_signup_date from <signup_table>
),
most_recent_purchase as (
  select user_id, max(cast(timestamp as date)) as most_recent_purchase_date from <purchase_table> group by 1
),
joined as (
  select 
    user_id, 
    account_signup_date, 
    most_recent_purchase_date, 
    date_diff(most_recent_purchase_date,account_signup_date,DAY) as retained_days
  from user_signups
  inner join most_recent_purchase using(user_id)
),
prep as (
  select 
    format_date('%Y-%m', account_signup_date) as signupYYYYMM
    count(*) as users,
    sum(case when retained_days >= 30 then 1 else 0 end) as retained_users_30
  from joined
  group by 1
)
select
  signupYYYYMM,
  users,
  retained_users_30/users as retention_30_days
from prep
order by 1

Надеюсь, вы сможете увидеть, как это можно изменить для еженедельных или ежегодных когорт и разных периодов хранения.

Несколько предостережений ... этот запрос предполагает, что все пользователи, которые создали учетную запись, совершили покупку. Если есть пользователи аккаунта, которые не совершали покупки, вам может потребоваться оставить присоединение, и вам может потребоваться изменить расчет / определение срока хранения (в зависимости от бизнес-целей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...