Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我会帮你的。它更简单、更便宜、更快,而且希望更易于维护。_Sql_Google Analytics_Google Bigquery_Retention - Fatal编程技术网

Sql 我会帮你的。它更简单、更便宜、更快,而且希望更易于维护。

Sql 我会帮你的。它更简单、更便宜、更快,而且希望更易于维护。,sql,google-analytics,google-bigquery,retention,Sql,Google Analytics,Google Bigquery,Retention,我在 它应该会起作用:) 我在上找到了这个查询 它应该会起作用:) 您好,欢迎来到Stack Overflow,请花点时间浏览“了解您在这里的道路”(以及赢得您的第一个徽章),阅读如何创建示例并进行检查,以增加获得反馈和有用答案的机会。您好,欢迎来到Stack Overflow,请花点时间浏览“了解您在这里的方式”(以及赢得您的第一枚徽章),阅读如何创建示例,并进行检查,以增加获得反馈和有用答案的机会。谢谢Mikhail!这让我尝到了味道。我已经提出了我的问题(或者我必须在上面提到的地方),如果

我在

它应该会起作用:)

我在上找到了这个查询

它应该会起作用:)


您好,欢迎来到Stack Overflow,请花点时间浏览“了解您在这里的道路”(以及赢得您的第一个徽章),阅读如何创建示例并进行检查,以增加获得反馈和有用答案的机会。您好,欢迎来到Stack Overflow,请花点时间浏览“了解您在这里的方式”(以及赢得您的第一枚徽章),阅读如何创建示例,并进行检查,以增加获得反馈和有用答案的机会。谢谢Mikhail!这让我尝到了味道。我已经提出了我的问题(或者我必须在上面提到的地方),如果你能查出来并让我知道你的想法?谢谢你的回复!谢谢你,米哈伊尔!这让我尝到了味道。我已经提出了我的问题(或者我必须在上面提到的地方),如果你能查出来并让我知道你的想法?谢谢你的回复!这个查询是正确的,但它只会给你一个对24日采取行动的群体的分析。在他的问题中,用户要求提供一些可以同时对几个队列进行分析的信息。您可以通过在步骤1的子查询中添加日期来改进此查询,以及在按天加入参与的用户时,包括参与的用户队列的日期(来自新的用户队列)。此查询是正确的,但它只会为您分析在24日执行操作的队列。在他的问题中,用户要求提供一些可以同时对几个队列进行分析的信息。您可以通过在步骤1的子查询中添加日期,以及按天加入参与的用户时,包括参与的用户队列的日期(来自新的用户队列),来改进此查询。
`WITH
cohort_items AS (
SELECT 
MIN( TIMESTAMP_TRUNC(TIMESTAMP_MICROS((visitStartTime*1000000 + 
h.time*1000)), DAY) ) AS cohort_day, fullVisitorID
FROM
TABLE123 AS U,
UNNEST(hits) AS h
WHERE _TABLE_SUFFIX BETWEEN "20170701" AND "20170731"
AND 'ACTION TAKEN'
GROUP BY 2
),


user_activites AS (
SELECT
A.fullVisitorID,
DATE_DIFF(DATE(TIMESTAMP_TRUNC(TIMESTAMP_MICROS((visitStartTime*1000000 + h.time*1000)), DAY)), DATE(C.cohort_day), DAY) AS day_number 
FROM `Table123` A

LEFT JOIN cohort_items C ON A.fullVisitorID = C.fullVisitorID,
UNNEST(hits) AS h

WHERE
A._TABLE_SUFFIX BETWEEN "20170701 AND "20170731"

AND 'ACTION TAKEN'
GROUP BY 1,2),

cohort_size AS (
SELECT 
cohort_day,
count(1) as number_of_users
FROM 
cohort_items
GROUP BY 1
ORDER BY 1
),

retention_table AS (
SELECT
C.cohort_day,
A.day_number,
COUNT(1) AS number_of_users
FROM
user_activites A

LEFT JOIN cohort_items C ON A.fullVisitorID = C.fullVisitorID
GROUP BY 1,2
)


SELECT
B.cohort_day,
S.number_of_users as total_users,
B.day_number,
B.number_of_users  /  S.number_of_users as percentage
FROM retention_table B

LEFT JOIN cohort_size S ON B.cohort_day = S.cohort_day

WHERE B.cohort_day IS NOT NULL
ORDER BY 1, 3
`
SELECT
  init_date,
  ARRAY((SELECT AS STRUCT days, freq, ROUND(freq * 100 / MAX(freq) OVER(), 2) FROM UNNEST(data) ORDER BY days)) data
FROM(
  SELECT
  init_date,
  ARRAY_AGG(STRUCT(days, freq)) data
FROM(
  SELECT
    init_date,
    data AS days,
    COUNT(data) freq
FROM(
  SELECT
    init_date,
    ARRAY(SELECT DATE_DIFF(PARSE_DATE("%Y%m%d", dts), PARSE_DATE("%Y%m%d", init_date), DAY) AS dt FROM UNNEST(dts) dts) data
  FROM(
    SELECT 
      MIN(date) init_date,
      ARRAY_AGG(DISTINCT date) dts
    FROM `Table123`
    WHERE TRUE
    AND EXISTS(SELECT 1 FROM UNNEST(hits) where eventinfo.eventCategory = 'recommendation') -- This is your 'ACTION TAKEN' filter
    AND _TABLE_SUFFIX BETWEEN "20170724" AND "20170731"
    GROUP BY fullvisitorid
    )
    ),
    UNNEST(data) data
    GROUP BY init_date, days
   )
  GROUP BY init_date
)
#standardSQL

###################################################
# Part 1: Cohort of New Users Starting on DEC 24
###################################################
WITH 
new_user_cohort AS (
  SELECT DISTINCT
    user_pseudo_id as new_user_id
  FROM
    `[your_project].[your_firebase_table].events_*`
  WHERE
    event_name =  `[chosen_event] ` AND
    #set the date from when starting cohort analysis
    FORMAT_TIMESTAMP("%Y%m%d", TIMESTAMP_TRUNC(TIMESTAMP_MICROS(event_timestamp), DAY, "Etc/GMT+1")) = '20191224' AND
    _TABLE_SUFFIX BETWEEN '20191224' AND '20191230'
),

num_new_users AS (
  SELECT count(*) as num_users_in_cohort FROM new_user_cohort
),

#############################################
# Part 2: Engaged users from Dec 24 cohort
#############################################
engaged_users_by_day AS (
  SELECT
    FORMAT_TIMESTAMP("%Y%m%d", TIMESTAMP_TRUNC(TIMESTAMP_MICROS(event_timestamp), DAY, "Etc/GMT+1")) as event_day,
    COUNT(DISTINCT user_pseudo_id) as num_engaged_users
  FROM
    `[your_project].[your_firebase_table].events_*`
  INNER JOIN
    new_user_cohort ON new_user_id = user_pseudo_id
  WHERE
    event_name = 'user_engagement' AND
    _TABLE_SUFFIX BETWEEN '20191224' AND '20191230'
  GROUP BY
    event_day
)


####################################################################
# Part 3: Daily Retention = [Engaged Users / Total Users]
####################################################################
SELECT
  event_day,
  num_engaged_users,
  num_users_in_cohort,
  ROUND((num_engaged_users / num_users_in_cohort), 3) as retention_rate
FROM
  engaged_users_by_day
CROSS JOIN
  num_new_users
ORDER BY
  event_day