You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Analytics用户事件计数计算逻辑及BigQuery匹配差异问询

Google Analytics事件仪表板与BigQuery计算差异问题

Google Analytics「用户行为分析」板块的事件仪表板展示以下指标:事件名称、事件总数、总用户数、用户事件计数(定义为平均每位用户的事件数)。通过BigQuery查询时,事件总数和总用户数能和GA后台精准匹配,但部分事件(比如页面浏览)的用户事件计数无法匹配,怀疑这类特定事件的用户事件计数并非简单的「事件总数/总用户数」,是否存在额外计算逻辑?

用户提供的BigQuery查询代码:

WITH test AS(SELECT * FROM `project.dataset.googleanalyticsevents` where dataset = 'analytics_xxx' 
and cast(concat(left(event_date,4),'-',substr(event_date,(-4),2),'-',right(event_date,2)) as date) between '2024-03-28' and '2024-03-29'),
test2 as (
SELECT
cast(concat(left(event_date,4),'-',substr(event_date,(-4),2),'-',right(event_date,2)) as date) dt,
event_name,
count(DISTINCT user_pseudo_id) usercount,
count(*) eventcount
FROM test
GROUP BY cast(concat(left(event_date,4),'-',substr(event_date,(-4),2),'-',right(event_date,2)) as date) , event_name

ORDER BY 1,2
)

SELECT dt, event_name, eventcount, usercount, (eventcount/usercount)
FROM test2

GA事件仪表板数据示例:
GA事件仪表板数据示例


核心原因:特定事件的用户事件计数存在专属计算逻辑

对于页面浏览(page_view)这类自动收集的事件,GA后台的用户事件计数确实不是简单的「事件总数/总用户数」,和你在BigQuery的计算逻辑有两点关键差异:

  1. 同会话同页面的重复事件合并
    GA后台统计页面浏览的用户事件计数时,会合并同一用户在单次会话内连续刷新同一页面的重复触发事件,只计为1次有效事件;但BigQuery的原始数据会保留所有触发记录,导致你计算的eventcount偏大,最终平均值和后台不一致。

  2. 用户身份的合并识别
    GA后台的「总用户数」会合并user_id和user_pseudo_id:如果同一用户同时存在这两个标识,会被算作1个用户;而你仅用user_pseudo_id去重,会把这类用户拆成2个,导致usercount偏大,计算出的平均值偏小。


对齐GA逻辑的BigQuery修正查询

WITH test AS(
  SELECT 
    *,
    -- 生成用户+会话+页面的唯一标识,用于合并同会话同页面的重复刷新
    CONCAT(
      IF(user_id IS NOT NULL, user_id, user_pseudo_id),
      (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'session_id'),
      (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location')
    ) AS user_session_page
  FROM `project.dataset.googleanalyticsevents` 
  WHERE dataset = 'analytics_xxx' 
    AND PARSE_DATE('%Y%m%d', event_date) BETWEEN '2024-03-28' AND '2024-03-29' -- 简化日期转换逻辑
),
test2 AS (
  SELECT
    PARSE_DATE('%Y%m%d', event_date) AS dt,
    event_name,
    -- 合并user_id和user_pseudo_id,对齐GA的用户去重逻辑
    COUNT(DISTINCT IF(user_id IS NOT NULL, user_id, user_pseudo_id)) AS usercount,
    -- 页面浏览事件按用户+会话+页面去重,其他事件保留原始计数
    CASE 
      WHEN event_name = 'page_view' THEN COUNT(DISTINCT user_session_page) 
      ELSE COUNT(*) 
    END AS eventcount
  FROM test
  GROUP BY dt, event_name
  ORDER BY dt, event_name
)
SELECT dt, event_name, eventcount, usercount, ROUND(eventcount/usercount, 2) AS avg_events_per_user
FROM test2

验证注意事项

  • 先单独针对page_view事件对比修正后的平均值和GA后台数据
  • 确认你的GA4数据中是否包含session_id参数,部分配置可能需要手动启用该参数收集
  • 检查是否存在user_id不为空的用户,这是影响用户数统计的关键因素

内容的提问来源于stack exchange,提问作者hSin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 22:10:16