Firebase 具有这个简洁的小功能,可以自动生成 sql 以确定 A/B 测试实验的每个变体记录的分析事件的事件计数。
SELECT
"Experiment_Name" AS experimentName,
CASE userProperty.value.string_value
WHEN "0" THEN "Baseline"
WHEN "1" THEN "Variant A"
WHEN "2" THEN "Variant B"
WHEN "3" THEN "Variant C"
WHEN "4" THEN "Variant D"
END AS experimentVariant,
event_name as eventName,
COUNT(*) AS count
FROM
`<id>.events_*`, UNNEST(user_properties) AS userProperty
WHERE
(_TABLE_SUFFIX between '20210625' AND '20210721')
AND userProperty.key = "firebase_exp_number"
GROUP BY experimentVariant, eventName
关于我要解决的问题的背景:鉴于 Firebase A/B 测试控制台的当前限制,我想制定一个解决方案:
- 拉出当前 CVR 限制 6 之外的事件
- 根据事件计数拉取用户量
- 按事件参数过滤这些事件
具体问题:
我想知道是否可以进一步优化下面的代码示例?我已经通过SELECT *
在顶部做 a 并WHERE
在底部添加 - 子句尝试了一些优化。
with base AS (
SELECT *
FROM `<id>.analytics_<number>.events_*`
WHERE (_TABLE_SUFFIX between '20210625' AND '20210721')
)
SELECT
event_date AS _date,
"Experiment_Name" AS experimentName,
CASE userProperty.value.string_value
WHEN "0" THEN "Baseline"
WHEN "1" THEN "Variant A"
WHEN "2" THEN "Variant B"
WHEN "3" THEN "Variant C"
WHEN "4" THEN "Variant D"
END AS experimentVariant,
event_name as eventName,
COUNT(event_name) AS event_count,
COUNT(DISTINCT user_pseudo_id) AS event_users_distinct,
ROUND(COUNT(event_name)/COUNT(DISTINCT user_pseudo_id),2) AS _avg
FROM
base
,UNNEST(user_properties) AS userProperty
,UNNEST(event_params) AS param
WHERE
userProperty.key = "firebase_exp_number"
AND platform = "ANDROID"
AND (
param.key = "firebase_screen"
AND event_name = "screen_view"
AND param.value.string_value = "specific_screen_name"
)
AND app_info.version = "0.0.1"
GROUP BY _date, experimentVariant, eventName
提前致谢 :)