任何人都可以帮助使用BIgQuery SQL查询从Google Analytics数据中提取特定页面的页面时间吗?
对于访问过某个特定页面的每个访客我都希望该页面的页面时间。这样我就可以计算页面的中值时间而不是平均值。
我假设将需要visitorId,hits.hitsNumber和hits.time维度。此外,以下点击的点击时间需要从某个方面查看点击页面的点击时间。
任何帮助都非常感激。
答案 0 :(得分:5)
试试这个:
SELECT
fullVisitorId,
hits.page.hostname,
hits.page.pagePath,
hits.hitNumber,
hits.time,
nextTime,
(nextTime - hits.time) as timeOnPage
FROM(
SELECT
fullVisitorId,
hits.page.hostname,
hits.page.pagePath,
hits.hitNumber,
hits.time,
LEAD(hits.time, 1) OVER (PARTITION BY fullVisitorId, visitNumber ORDER BY hits.time ASC) as nextTime
FROM [PROJECTID:DATASETID.ga_sessions_YYYYMMDD]
WHERE hits.type = "PAGE"
)
此代码的关键是LEAD()
函数,该函数根据PARTITION BY
和ORDER BY
限定符从分区的下一行获取指定值。
希望有所帮助!
答案 1 :(得分:0)
要考虑到最后一页的时间,可以使用此查询,并且由于BQ无法计算最后一页所花费的时间,因此它会将最后一页的时间设为零,但至少会给出零而不是空。
SELECT
fullVisitorId,
hits.page.hostname,
hits.page.pagePath,
hits.hitNumber,
hits.time,
nextTime,
CASE
WHEN hits.isExit IS NOT NULL THEN last_interaction - hit_time
ELSE next_pageview - hit_time
END
AS time_on_page
FROM(
SELECT
fullVisitorId,
hits.page.hostname,
hits.page.pagePath,
hits.hitNumber,
hits.isExit,
hits.time/1000 as hits_time,
LEAD(hits.time/1000, 1) OVER (PARTITION BY fullVisitorId, visitNumber ORDER BY hits.time ASC) as nextTime,
MAX(IF(hits.isInteraction = TRUE,hits.time / 1000,0)) OVER (PARTITION BY fullVisitorId, visitStartTime) AS last_interaction
FROM [PROJECTID:DATASETID.ga_sessions_YYYYMMDD]
WHERE hits.type = "PAGE"
)