如何通过BigQuery筛选同时触发两个指定事件的Google Analytics用户
解决方法:统计同时触发两个事件的用户
你的原查询用UNION ALL合并了两个独立条件的用户统计结果,但这只能得到分别满足单个条件的用户数。要找出同时触发两个事件的用户,需要筛选出同时满足两个条件的用户交集,以下是两种可行的BigQuery SQL写法:
方法一:分组后用HAVING筛选
SELECT COUNT(DISTINCT user_pseudo_id) AS users_both_events FROM `*****` t, UNNEST(event_params) AS event_param WHERE event_name = 'select_content' GROUP BY user_pseudo_id HAVING SUM(CASE WHEN event_param.key = 'content_type' AND event_param.value.string_value = 'Q12' THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN event_param.key = 'content_id' AND event_param.value.string_value = 'Option_C' THEN 1 ELSE 0 END) > 0
逻辑说明:
- 按
user_pseudo_id分组,聚焦单个用户的所有事件参数 - 用
CASE语句分别标记用户是否触发了两个目标条件,SUM结果大于0表示该用户存在对应事件 HAVING子句筛选出同时满足两个条件的用户,最后统计这类用户的总数
方法二:子查询标记后筛选
SELECT COUNT(DISTINCT user_pseudo_id) AS users_both_events FROM ( SELECT user_pseudo_id, MAX(CASE WHEN event_param.key = 'content_type' AND event_param.value.string_value = 'Q12' THEN 1 ELSE 0 END) AS has_q12, MAX(CASE WHEN event_param.key = 'content_id' AND event_param.value.string_value = 'Option_C' THEN 1 ELSE 0 END) AS has_option_c FROM `*****`, UNNEST(event_params) AS event_param WHERE event_name = 'select_content' GROUP BY user_pseudo_id ) WHERE has_q12 = 1 AND has_option_c = 1
逻辑说明:
- 子查询中按用户分组,用
MAX标记用户是否触发过对应条件(只要触发过一次就标记为1) - 外层查询筛选出两个标记都为1的用户,统计总数
内容的提问来源于stack exchange,提问作者grn_uk
相关产品推荐
相关产品推荐

