ããã°ãã¯ãYuinaã§ãð
仿¥ã¯ããã¹ãã³ã±ã¢ã¢ããªãä»ã©ããããã®äººãã¡ãããšäœ¿ã£ãŠããã ãããïŒã
ã¿ãããªæãã§ããŠãŒã¶ãŒããã®åãããã£ãšãªã¢ã«ã«ç¥ããããŠã
é±ããšã®ã¢ã¯ãã£ããŠãŒã¶ãŒåæïŒWeekly MAUïŒããã£ãŠã¿ãŸãããð ð»
ãªã»ãã©ïŒïŒè€æ°ã¢ã«äœæïŒãé€ããŠãã»ããšã«å€§äºãªãŠãŒã¶ãŒã ããã«ãŠã³ãããŠãŸã!
ð¡ ãªã»ãã©ã£ãŠãªã«ïŒMAUã£ãŠã©ãããæå³ïŒ
ãèšèã®æå³ããç¥ããããïŒããšããæ¹ã¯ãå ã«ãã¡ãã®èšäºããã§ãã¯ããŠã¿ãŠãã ããð
â¶ åæç¥èãšããŠããªã»ãã©ãMAUã«ã€ããŠã¯ãã¡ãã®èšäºãã芧ãã ããðð

ããã§ã¯ããããããé¡ãããããŸãïŒ
ðŸ ä»å䜿ã£ãããŒã¿ããŒã¹ã®äžèº«ã¯ãã¡ãã§ãâ
ð§ââïž beauty.users ããŒãã«ïŒãŠãŒã¶ãŒæ
å ±ïŒ
| user_id | guid | install_time |
|---|---|---|
| 101 | A | 2025-02-10 |
| 102 | A | 2025-01-01 |
| 201 | B | 2025-03-05 |
| 301 | C | 2025-01-15 |
ð è£è¶³ïŒ
install_time ã¯ã¢ããªãã€ã³ã¹ããŒã«ããæ¥æãããã§ããã€å
¥ãããããããããŸãð¡
guid ã¯ç«¯æ«IDã¿ãããªã€ã¡ãŒãžã§ããåã端æ«ã§è€æ°ã¢ã«ãŠã³ãïŒïŒãªã»ãã©ïŒãäœã£ãŠãèå¥ã§ããŸãïŒ
𪩠beauty.login_log ããŒãã«ïŒãã°ã€ã³å±¥æŽïŒ
| user_id | login_time |
|---|---|
| 101 | 2025-02-15 10:00 |
| 102 | 2025-01-03 08:00 |
| 201 | 2025-03-10 12:30 |
| 301 | 2025-01-20 19:45 |
ð è£è¶³ïŒ
ããã¯ãŠãŒã¶ãŒãå®éã«ãã°ã€ã³ããèšé²ã§ãâš
仿¥ã®ããã°ã©ã ð©âð»â€ïžâð¥
ä»åäœæããããã°ã©ã ã¯ä»¥äžã®ãšããã§ãã
WITH latest_users AS (
SELECT
DISTINCT ON (guid)
user_id,
guid,
install_time
FROM
beauty.users
ORDER BY
guid,
install_time DESC
)
, login_with_users AS (
SELECT
lu.user_id,
DATE_TRUNC('week', lu.install_time)::date AS install_week,
DATE_TRUNC('week', ll.login_time)::date AS login_week
FROM
beauty.login_log ll
JOIN
latest_users lu
ON
ll.user_id = lu.user_id
)
SELECT
install_week,
login_week,
COUNT(DISTINCT user_id) AS unique_users
FROM
login_with_users
GROUP BY
install_week,
login_week
ORDER BY
install_week,
login_week;
解説âïžâïž
ð 鱿¬¡MAUåæã®æé ã¯ãããªæãã§ãã
1. ææ°ãŠãŒã¶ãŒãæœåºïŒãªã»ãã©é€å€âšïŒ
guidããšã«ãã¡ã°ãæ°ããuser_idãæœåº- ãªã»ãã©ã®åœ±é¿ãã«ããããŠãåæã®ç²ŸåºŠUPïŒ
2.ãªã»ãã©é€å€æžã¿ãã°ã€ã³å±¥æŽãäœæð
login_logã«ææ°ãŠãŒã¶ãŒæ å ±ãJOIN- æ¬åœã«äœ¿ã£ãŠã人ã ãã®ãã°ã€ã³å±¥æŽãã§ããããð«
3.ã€ã³ã¹ããŒã«é± à ãã°ã€ã³é±ã§éèšð
TO_CHAR(..., 'IYYY-IW')ã䜿ã£ãŠé±åäœã®ãæéã©ãã«ãã«å€æCOUNT(DISTINCT user_id)ã§ãŠããŒã¯ãªã¢ã¯ãã£ããŠãŒã¶ãŒæ°ãã«ãŠã³ãïŒ
ã€ã¡ãŒãžïŒ

ããããã¯ãåæã®æé ã«ã€ããŠïŒã¹ãããã§èŠãŠãããŸãããã
ðSTEP1ïŒãŸãã¯ãªã»ãã©é€å»ïŒ
guidããšã«ææ°user_idã ãæ®ããŸãããð
SQL:
WITH latest_users AS (
SELECT
DISTINCT ON (guid)
user_id,
guid,
install_time
FROM
beauty.users
ORDER BY
guid,
install_time DESC
)

ð STEP2ïŒãã°ã€ã³ããŒã¿ã«é±ã®æ å ±ãä»ããŠãJOINâš
DATE_TRUNC('week', æ¥ä») ã§ããã®æ¥ãå±ããé±ã®æææ¥ãåããŸãã
install_week / login_week 㯠DATE_TRUNC('week', æ¥ä») ã§é±ã®æææ¥ã«åãæšãŠãŸãð
ïŒäŸïŒ2025-01-10 â 2025-01-06é±ïŒ
SQL:
, login_with_users AS (
SELECT
lu.user_id,
DATE_TRUNC('week', lu.install_time)::date AS install_week,
DATE_TRUNC('week', ll.login_time)::date AS login_week
FROM
beauty.login_log ll
JOIN
latest_users lu
ON
ll.user_id = lu.user_id
)

ðSTEP3ïŒé±Ãé±ã§ã¯ãã¹éèšããŠããŠããŒã¯ãŠãŒã¶ãŒæ°ã«ãŠã³ãâš
ã€ã³ã¹ããŒã«é± à ãã°ã€ã³é±ã§ã°ã«ãŒãåããŠããã€ã€ã³ã¹ããŒã«ãã人ããã©ã®é±ã«ãã°ã€ã³ãããïŒããã¯ãã¹ã§èŠããããã«ããŸãã
ããã«ãCOUNT(DISTINCT user_id) ã§ãã¢ã¯ãã£ããªäººã ããã£ããæ°ããŸãâš
SQL:
SELECT
install_week,
login_week,
COUNT(DISTINCT user_id) AS unique_users
FROM login_with_users
GROUP BY install_week, login_week
ORDER BY install_week, login_week;

çµæãåãé±ã«ã€ã³ã¹ããŒã«ïŒãã°ã€ã³ãã人ãããã°ã
ã€ã³ã¹ããŒã«ããŠãã1ã2é±éåŸã«ãã°ã€ã³ããŠã人ãããããšãããããŸããð«
ãŸãšãâïžâš
仿¥ã¯ãã¹ãã³ã±ã¢ã¢ããªã䜿ã£ãŠãããŠããŠãŒã¶ãŒããã®åããããã£ãšãªã¢ã«ã«ç¥ããããŠ
ãé±ããšã®ã¢ã¯ãã£ããŠãŒã¶ãŒåæïŒMAUïŒããããŠã¿ãŸããïŒ
MAUãè¡ãããšã§ããã©ã®é±ã«ã€ã³ã¹ããŒã«ãã人ããã©ã®é±ãŸã§äœ¿ãç¶ããŠãïŒãã£ãŠèŠããããã«ãªããŸãâš
ã€ãŸããã1å䜿ã£ãŠçµããããªã®ãããã¡ãããšç¶ããŠäœ¿ã£ãŠãããŠãã®ãïŒãã£ãŠãšãããé±ããšã«èŠãŠãããšâŠ
âš ã©ã®é±ã«ã€ã³ã¹ããŒã«ããããŠãŒã¶ãŒããã©ã®é±ãŸã§äœ¿ã£ãŠãããŠããã®ãïŒ
âš ã¢ããªã®âæšãç¶ãåïŒRetentionïŒâãé±åäœã§èŠããŠããŸãïŒ
ãã®èŠç¹ããããšããªãªãŒã¹åŸã®åå¿ãšãããã£ã³ããŒã³ã®å¹æãã°ã©ãã§èŠããããã«ãªãããè¶ äŸ¿å©ã§ãããïŒ
ããããšãããããŸããðâš
ã³ã¡ã³ã