0

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

提前致谢 :)

4

0 回答 0