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