如何在 BigQuery 中查找用户在我们的应用上花费的时间 (engagement_time)?

Posted

技术标签:

【中文标题】如何在 BigQuery 中查找用户在我们的应用上花费的时间 (engagement_time)?【英文标题】:How to find time spent (engagement_time) on our app by the users in BigQuery? 【发布时间】:2021-09-21 10:48:32 【问题描述】:

我正在尝试计算用户在我的应用上花费的总时间。我们在 BigQuery 中集成了 Firebase 分析数据。我可以在查询的 select 语句中使用engagement_time_msec/1000 的值的总和吗?这就是我正在尝试的:

SELECT SUM(x.value.int_value) FROM "[dataset]", UNNEST(event_params) AS x WHERE x.key = "engagement_time_msec"

执行此查询后,我得到了非常大的价值(它每天花费大量时间)。我不确定是否可以使用 SUM("engagement_time_msec") 来计算用户在应用上花费的总时间。

我没想到用户会在应用上花费这么多时间。这是计算engagement_time的正确方法,还是计算engagement_time的最佳事件?

任何帮助将不胜感激。

【问题讨论】:

样本数据、预期结果以及对您希望使用数据完成的目标的清晰说明会有所帮助。 【参考方案1】:

根据google analytics docs 关于engagement_time_sec,该字段定义为“自上次用户参与事件以来的额外参与时间(毫秒)”。因此,如果您只看这个,您将失去用户之前在提到的user_engagement 事件触发之前花费的所有时间。

我要做的,因为现在 ga_session_id 已定义,将获取每个 ga_session_id 时间戳的最大值和最小值,对每种情况使用 TIMESTAMP_DIFF() 函数,并对所有会话的结果求和某一天:

WITH ga_sessions AS (
  SELECT
    event_timestamp,
    event_date,
    params.value.int_value AS ga_session_id
  FROM 
    `analytics_123456789.events_*`, UNNEST(event_params) AS params
  WHERE 
    params.key = "ga_session_id"
),
session_length AS (
  SELECT
    event_date,
    TIMESTAMP_DIFF(MAX(TIMESTAMP_MICROS(event_timestamp)), MIN(TIMESTAMP_MICROS(event_timestamp)), SECOND) AS session_duration_seconds
  FROM
    ga_sessions
  WHERE 
    ga_session_id IS NOT NULL
  GROUP BY
    1
),
final AS (
  SELECT 
    event_date,
    SUM(session_duration_seconds) as total_seconds_in_app
  FROM 
    session_length 
  GROUP BY
    1
  ORDER BY
    1 DESC
)
SELECT * FROM final

输出(从我工作的应用程序中提取的数据):

event_date | total_seconds_in_app
-----------+--------------------
20210920   | 45600
20210919   | 43576
20210918   | 44539

【讨论】:

以上是关于如何在 BigQuery 中查找用户在我们的应用上花费的时间 (engagement_time)?的主要内容,如果未能解决你的问题,请参考以下文章

在 Google BigQuery 中查找用户的旅程

如何根据用户 ID 和 ID 访问的级别数使用 Google BigQuery 查找中位数?

如何计算Firebase中的MAU?我需要BigQuery吗?

如何计算 Firebase 中的 MAU?我需要 BigQuery 吗?

如何找到在 BigQuery 中触发设置事件之前触发的事件?

查找要插入 BigQuery 的列名