最近我们在 BigQuery 表中为每个事件行添加了 ga_session_id,您可以更轻松地计算会话数和平均会话长度。
ga_session_id 的值在整个会话中保持不变,因此您无需单独定义会话。
您可以通过按 user_pseudo_id 、 ga_session_id 和 event_date 对结果进行分组来获取 event_timestamp 列的 Min 和 Max 值,以便获得任何用户在任何给定日期的特定会话的会话持续时间。
WITH
UserSessions as (
SELECT
user_pseudo_id,
event_timestamp,
event_date,
(Select value.int_value from UNNEST(event_params) where key = "ga_session_id") as session_id,
event_name
FROM `projectname.dataset_name.events_*`
),
SessionDuration as (
SELECT
user_pseudo_id,
session_id,
COUNT(*) AS events,
TIMESTAMP_DIFF(MAX(TIMESTAMP_MICROS(event_timestamp)), MIN(TIMESTAMP_MICROS(event_timestamp)), SECOND) AS session_duration
,event_date
FROM
UserSessions
WHERE session_id is not null
GROUP BY
user_pseudo_id,
session_id
,event_date
)
Select count(session_id) as NumofSessions,avg(session_duration) as AverageSessionLength from SessionDuration
最后你只需要计算 session_id 来得到会话总数,然后计算会话持续时间的平均值来得到平均会话长度的值。