Weekly Retention을 구하는 쿼리를 바닥부터 스스로 작성해보세요.
WITH base AS(
SELECT
DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date,
DATE_TRUNC(DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), WEEK(MONDAY)) AS event_week,
event_name,
user_pseudo_id
FROM advanced.app_logs
), week_diff_data AS(
#first_week, weeks_after_first_week 추출
SELECT
*,
DATE_DIFF(event_week, first_week, WEEK(MONDAY)) AS weeks_after_first_week
FROM(
SELECT
*,
MIN(event_week) OVER(PARTITION BY user_pseudo_id) AS first_week
FROM base
)
), visit_cnt_data AS(
#active_users, cohort_users 추출
SELECT
*,
FIRST_VALUE(active_users) OVER(PARTITION BY first_week ORDER BY weeks_after_first_week) AS cohort_users
FROM(
SELECT
first_week,
weeks_after_first_week,
COUNT(DISTINCT user_pseudo_id) AS active_users,
FROM week_diff_data
GROUP BY ALL
)
)
#retention_rate 추출
SELECT
*,
ROUND(SAFE_DIVIDE(active_users, cohort_users), 2) AS retention_rate
FROM visit_cnt_data
ORDER BY first_week, weeks_after_first_week


(방문 주차 기준 / 붉은색으로 갈수록 낮은 값, 초록색으로 갈수록 높은 값을 의미)
https://docs.google.com/spreadsheets/d/1YXni_sBkk79UPQFc3LL7vcHBk3CbN7mUx3CQvGJLMjU/edit?usp=sharing