基于BigQuery的Analytics与Crashlytics数据计算无崩溃会话问询
如何用BigQuery计算Crashlytics无崩溃会话
能不能计算无崩溃会话?
可以。通过Crashlytics导出到BigQuery的数据集,结合会话标识字段和崩溃记录的关联,就能准确计算指定时间范围内的无崩溃会话占比。
识别用户会话并关联崩溃记录的方法
- 识别会话
Crashlytics在BigQuery的事件数据中,每个用户会话都有唯一的session_id标识。你可以从events表中筛选event_name = 'session_start'的记录,获取指定时间范围内的所有会话,这些记录代表了所有启动过的会话。同时,event_timestamp字段可以用来限定统计的时间范围。 - 关联崩溃记录
BigQuery的crashes表中,每条崩溃记录都会关联对应的session_id——这个ID就是崩溃发生时所在的会话ID。如果一个session_id在crashes表中有匹配记录,说明该会话因崩溃结束;反之则属于无崩溃会话。
计算无崩溃会话占比的SQL示例
假设你的Crashlytics数据导出在BigQuery的your_project.your_firebase_dataset数据集下,以下SQL可以计算指定时间范围的无崩溃会话占比:
WITH all_sessions AS ( -- 获取指定时间范围内的所有会话(去重,每个session_id只算一次) SELECT DISTINCT session_id FROM `your_project.your_firebase_dataset.events` WHERE event_name = 'session_start' AND event_timestamp BETWEEN TIMESTAMP('2024-01-01 00:00:00') AND TIMESTAMP('2024-01-31 23:59:59') ), crashed_sessions AS ( -- 获取同一时间范围内发生崩溃的会话(去重) SELECT DISTINCT session_id FROM `your_project.your_firebase_dataset.crashes` WHERE crash_timestamp BETWEEN TIMESTAMP('2024-01-01 00:00:00') AND TIMESTAMP('2024-01-31 23:59:59') ) -- 计算无崩溃会话占比 SELECT COUNT(all_sessions.session_id) AS total_sessions, COUNT(all_sessions.session_id) - COUNT(crashed_sessions.session_id) AS crash_free_sessions, ROUND( (COUNT(all_sessions.session_id) - COUNT(crashed_sessions.session_id)) / COUNT(all_sessions.session_id) * 100, 2 ) AS crash_free_session_percentage FROM all_sessions LEFT JOIN crashed_sessions ON all_sessions.session_id = crashed_sessions.session_id
注意事项
- 确保时间范围的一致性:
events表的event_timestamp和crashes表的crash_timestamp要保持相同的统计区间。 - 去重处理:同一个会话可能在
events表中有多条记录(比如会话中的其他事件),所以必须用DISTINCT来确保每个会话只被统计一次。 - 异常会话处理:如果某个会话没有
session_end事件但也没有对应的崩溃记录,依然判定为无崩溃会话——因为Crashlytics中只有明确的崩溃记录才会标记会话因崩溃结束,其他情况(比如用户主动退出)都属于正常结束的会话。
内容的提问来源于stack exchange,提问作者ror
相关产品推荐
相关产品推荐

