gpt4 book ai didi

google-analytics - 通过 BigQuery 访问 Firebase 封闭漏斗中的结构和数组

转载 作者:行者123 更新时间:2023-12-03 16:08:37 24 4
gpt4 key购买 nike

我偶然发现了这个标准 SQL BigQuery documentation本周,这让我开始使用 Firebase Analytics 封闭漏斗。然而,我得到了错误的结果(查看下图)。在没有首先开始“Tutorial_LessonStarted >> Lesson = 1”之前,应该没有用户拥有“Tutorial_LessonCompleted”。这可能是由于各种原因。

问题:

  • 使用 User Property = "first_open_time"是否明智,还是使用 Event = "first_open"更好。后一种实现会是什么样子?
  • 我怀疑我可能没有正确深入到:事件(String =“Tutorial_LessonStarted”)>>参数(String =“LessonNumber”)>>值(String =“lesson1”)?
  • _TABLE_SUFFIX = '20170701' 上的过滤器如何工作,我读到这会更便宜。任何优化的代码建议都会张开双臂并投赞成票!
    #standardSQL
    SELECT
    step1, step2, step3, step4, step5, step6,
    COUNT(*) AS funnel_count,
    COUNT(DISTINCT user_id) AS users
    FROM (
    SELECT
    user_dim.app_info.app_instance_id AS user_id,
    event.timestamp_micros AS event_timestamp,
    event.name AS step1,
    LEAD(event.name, 1) OVER (
    PARTITION BY user_dim.app_info.app_instance_id
    ORDER BY event.timestamp_micros ASC) as step2,
    LEAD(event.name, 2) OVER (
    PARTITION BY user_dim.app_info.app_instance_id
    ORDER BY event.timestamp_micros ASC) as step3,
    LEAD(event.name, 3) OVER (
    PARTITION BY user_dim.app_info.app_instance_id
    ORDER BY event.timestamp_micros ASC) as step4,
    LEAD(event.name, 4) OVER (
    PARTITION BY user_dim.app_info.app_instance_id
    ORDER BY event.timestamp_micros ASC) as step5,
    LEAD(event.name, 5) OVER (
    PARTITION BY user_dim.app_info.app_instance_id
    ORDER BY event.timestamp_micros ASC) as step6
    FROM
    `......`,
    UNNEST(event_dim) AS event,
    UNNEST(user_dim.user_properties) AS user_prop
    WHERE user_prop.key = "first_open_time"
    ORDER BY 1, 2, 3, 4, 5 ASC
    )
    WHERE step6 = "Tutorial_LessonStarted" AND EXISTS (
    SELECT *
    FROM `......`,
    UNNEST(event_dim) AS event,
    UNNEST(event.params)
    WHERE key = 'LessonNumber' AND value.string_value = "lesson1") GROUP BY step1, step2, step3, step4, step5, step6
    ORDER BY funnel_count DESC
    LIMIT 100;

  • 注:
  • 输入您的查询表 FROM,即:project_id.com_game_example_IOS.app_events_20170212 ,
  • 我省略了 funnel_count 和 user_count。

  • 输出:

    Output

    -------------------------------------------------- --------

    自上述原始问题以来的更新:

    @Elliot:我不明白您为什么说:-确保带有第1课的事件在Tutorial_LessonStarted之前。

    Tutorial_LessonStarted 有一个参数“LessonNumber”,其值为第 1 课、第 2 课、第 3 课、第 4 课。

    我想计算漏斗中最后一步发生的所有漏斗,等于 LessonNumber=lesson1。

    因此,应用于全新用户的第一个 session 的事件日志数据(又名:触发 first_open_time 的用户),答案将如下表所示:
  • View.OnboardingWelcomePage
  • View.OnboardingFinalPage
  • View.JamLoading
  • View.JamLoading
  • Jam.UserViewsJam
  • Jam.ProjectOpened
  • View.Jammixer
  • Tutorial.LessonStarted(此参数“LessonNumber”的值将等于“lesson1”)
  • Jam.ProjectPlayStarted
  • View.JamLoopSelector
  • View.JamMixer
  • View.JamLoopSelector
  • View.JamMixer
  • View.JamLoopSelector
  • View.JamMixer
  • Tutorial.LessonCompleted
  • Tutorial.LessonStarted(此参数“LessonNumber”的值将等于“lesson2”)

  • 因此,首先获取所有拥有 的用户很重要。 first_open_time 在特定的一天,还将事件构造成一个漏斗,以便漏斗中的最后一个事件与一个事件和一个特定的参数值匹配,然后从那里“向后”形成漏斗。

    enter image description here

    最佳答案

    让我进行一些解释,然后看看我是否可以建议一个查询来帮助您入门。

    看起来您想分析分析数据中的事件序列,但序列已经为您准备好了——您有一个事件数组。看着Firebase schema for BigQuery , event_dim是相关的列,除非我有什么误解,否则这些事件是按时间排序的。如果要检查第六个事件的名称,可以使用:

    event_dim[SAFE_ORDINAL(6)].name

    这将评估为 NULL如果事件少于六个,否则它将为您提供带有事件名称的字符串。

    另一个观察结果是您正试图同时分析 event_dimuser_dim ,但是您正在取两者的叉积,这将爆炸行数并且难以推理查询的结果。要查找特定的用户属性,请使用以下形式的表达式:
    (SELECT value.value.string_value
    FROM UNNEST(user_dim.user_properties)
    WHERE key = 'first_open_time') = '<expected property value>'

    结合这两个过滤器,您的 FROMWHERE子句看起来像这样:
    FROM `project_id.com_game_example_IOS.app_events_*`
    WHERE _TABLE_SUFFIX = '20170701' AND
    event_dim[SAFE_ORDINAL(6)].name = 'Tutorial_LessonStarted' AND
    (SELECT value.value.string_value
    FROM UNNEST(user_dim.user_properties)
    WHERE key = 'first_open_time') = '<expected property value>'

    使用括号运算符访问 event_dim 中的步骤,我们可以这样做:
    WITH FilteredInput AS (
    SELECT *
    FROM `project_id.com_game_example_IOS.app_events_*`
    WHERE _TABLE_SUFFIX = '20170701' AND
    event_dim[SAFE_ORDINAL(6)].name = 'Tutorial_LessonStarted' AND
    (SELECT value.value.string_value
    FROM UNNEST(user_dim.user_properties)
    WHERE key = 'first_open_time') = '<expected property value>' AND
    -- ensure that an event with lesson1 precedes Tutorial_LessonStarted
    EXISTS (
    SELECT 1
    FROM UNNEST(event_dim) WITH OFFSET event_offset
    CROSS JOIN UNNEST(params)
    WHERE key = 'LessonNumber' AND
    value.string_value = 'lesson1' AND
    event_offset < 5
    )
    )
    SELECT
    event_dim[ORDINAL(1)].name AS step1,
    event_dim[ORDINAL(2)].name AS step2,
    event_dim[ORDINAL(3)].name AS step3,
    event_dim[ORDINAL(4)].name AS step4,
    event_dim[ORDINAL(5)].name AS step5,
    event_dim[ORDINAL(6)].name AS step6,
    COUNT(*) AS funnel_count,
    COUNT(DISTINCT user_dim.user_id) AS users
    FROM FilteredInput
    GROUP BY step1, step2, step3, step4, step5, step6;

    这将返回所有唯一的“路径”以及每个路径的不同用户的计数和数量。请注意,我只是在脑海中写下这个——我没有可以尝试的代表性数据——所以可能存在语法或其他错误。

    关于google-analytics - 通过 BigQuery 访问 Firebase 封闭漏斗中的结构和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45619643/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com