GA4与UA会话量差异及BigQuery查询结果不符问题排查
GA4会话量差异问题排查分析
一、GA4 UI与BigQuery查询结果不符的核心原因
- 数据处理逻辑差异:GA4 UI会自动应用内置过滤(比如排除内部流量、测试数据)、数据采样、归因修正,还会整合离线回填数据;而BigQuery导出的是原始事件数据,不会默认做这些处理,需要手动添加过滤条件。
- 会话计算的细节差异:GA4 UI的会话统计严格遵循其规则(30分钟无活动自动结束、跨午夜拆分会话),还会处理异常数据(比如重复会话ID、缺失标识的用户);你的查询直接拼接用户标识与会话ID,未考虑部分事件缺失
ga_session_id参数的情况,也没处理用户标识为空的场景,导致部分会话未被统计。 - 数据完整性差异:GA4 UI的当日数据可能经过了延迟同步和补全,而BigQuery的实时导出数据可能存在部分事件还未完全写入的情况,导致统计结果偏低。
二、你的两个BigQuery查询语句的问题
- 基于
user_pseudo_id的查询(结果175):部分登录用户的user_pseudo_id和user_id对应同一个真实用户,若同一用户在会话中既有匿名又有登录状态,会被统计为两个不同会话;另外,部分事件可能缺失ga_session_id,子查询返回null,拼接后结果为null,不会被count(distinct)统计,导致会话数少算。 - 基于
user_id的查询(结果278):大量匿名用户没有user_id,这部分用户的会话会因为user_id为null,拼接后结果为null而被排除,直接漏掉了匿名用户的会话量,所以结果远低于GA4 UI的331。
三、UA与GA4会话量差异的额外说明
UA的104和GA4的331差异主要源于两者的会话定义完全不同:
- UA会话触发规则:30分钟无活动或用户来源/媒介变化时结束会话;GA4仅以30分钟无活动或跨午夜作为会话结束条件,触发会话的事件范围更广(比如自动收集的滚动、点击事件都会触发会话)。
- 用户追踪逻辑:UA依赖
client_id,GA4使用user_pseudo_id+user_id的组合,跨设备追踪能力更强,会将同一用户的跨设备操作合并或拆分,导致会话统计差异。 - 数据收集范围:GA4默认自动收集更多事件类型,而UA需要手动配置,这也会让GA4统计到更多会话。
修正后的BigQuery会话统计语句
要对齐GA4 UI的会话统计,需要兼顾所有用户类型、过滤无效数据,示例语句如下:
SELECT COUNT(DISTINCT CONCAT( COALESCE(user_id, user_pseudo_id), -- 优先用user_id,无则用user_pseudo_id '-', (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') )) AS sessions FROM `your-project-id.analytics_xxxxxx.events_20230321` WHERE -- 仅统计包含会话ID的有效事件 EXISTS (SELECT 1 FROM UNNEST(event_params) WHERE key = 'ga_session_id') -- 排除内部流量(如果GA4 UI已配置此过滤) AND (SELECT value.string_value FROM UNNEST(user_properties) WHERE key = 'internal_traffic') IS NULL -- 排除测试用户(可根据实际情况添加) AND user_pseudo_id NOT IN ('test-user-id-1', 'test-user-id-2')
内容的提问来源于stack exchange,提问作者Tian
相关产品推荐
相关产品推荐

