繁体   English   中英

如何使用 SQL 计算 BigQuery 中的每周留存率

[英]How to calculate weekly retention in BigQuery using SQL

我有下表,其中包含周数和保留率。

|creation_week |num_engaged_users  |num_users_in_cohort |retention_rate|     
|:------------:|:-----------------:|:------------------:|:------------:|
|37|          373114              |4604                |67.637|
|38|          1860                |4604.               |40.4|   
|39|          1233                |4604                |26.781|
|40|          668                 |4604                |14.509|
|41|          450                 |4604                |9.774|
|42|                           463|                4604|10.056|

我需要的是让它看起来像这样

|week |week0 |week1 |week2|week3|week4|week5|week6|
|:---:|:----:|:----:|:---:|:---:|:---:|:---:|:---:|
|week37|100|ret.rate|ret.rate|ret.rate|ret.rate|ret.rate|ret.rate|
|week38|100|ret.rate|ret.rate|ret.rate|ret.rate|ret.rate|
|week39|100|ret.rate|ret.rate|ret.rate|ret.rate|
|week40|100|ret.rate|ret.rate|ret.rate|
|week41|100|ret.rate|ret.rate|
|week42|100|ret.rate|

如何使用 BigQuery SQL 做到这一点?

出于某种原因,除非所有表都标记为代码,否则 Stackoverflow 不允许发布此问题...

我将提供我在第一个答案中使用的 SQL 代码,因为它也不允许我发布它

WITH
  new_user_cohort AS (
  WITH
    #table with cookie and user_ids for the later matching
    table_1 AS (
    SELECT
      DISTINCT props.value.string_value AS cookie_id,
      user_id
    FROM
      `stockduel.analytics.events`,
      UNNEST(event_properties) AS props
    WHERE
      props.key = 'cookie_id'
      AND user_id>0),
    #second table which gives acess to the sample with the users who performed the event
    table_2 AS (
    SELECT
      DISTINCT props.value.string_value AS cookie_id,
      EXTRACT(WEEK
      FROM
        creation_date) AS first_week
    FROM
      `stockduel.analytics.events`,
      UNNEST(event_properties) AS props
    WHERE
      props.key = 'cookie_id'
      AND event_type = 'launch_first_time'
      #set the date from when starting cohort analysis
      AND EXTRACT(WEEK
      FROM
        creation_date) = EXTRACT(WEEK
      FROM
        DATE '2021-09-15'))
    #join user id with cookie_id and group the elements to remove the duplicates
  SELECT
    user_id,
    first_week
  FROM
    table_2
  JOIN
    table_1
  ON
    table_1.cookie_id = table_2.cookie_id
    #group the results to avoid duplicates
  GROUP BY
    user_id,
    first_week ),
  num_new_users AS (
  SELECT
    COUNT(*) AS num_users_in_cohort,
    first_week
  FROM
    new_user_cohort
  GROUP BY
    first_week ),
  engaged_users_by_day AS (
  SELECT
    COUNT(DISTINCT `stockduel.analytics.ws_raw_sessions_v2`.user_id) AS num_engaged_users,
    EXTRACT(WEEK
    FROM
      started_at) AS creation_week,
  FROM
    `stockduel.analytics.ws_raw_sessions_v2`
  JOIN
    new_user_cohort
  ON
    new_user_cohort.user_id = `stockduel.analytics.ws_raw_sessions_v2`.user_id
  WHERE
    EXTRACT(WEEK
    FROM
      started_at) BETWEEN EXTRACT(WEEK
    FROM
      DATE '2021-09-15')
    AND EXTRACT(WEEK
    FROM
      DATE '2021-10-22')
  GROUP BY
    creation_week )
SELECT
  creation_week,
  num_engaged_users,
  num_users_in_cohort,
  ROUND((100*(num_engaged_users / num_users_in_cohort)), 3) AS retention_rate
FROM
  engaged_users_by_day
CROSS JOIN
  num_new_users
ORDER BY
  creation_week

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM