需要BigQuery SQL查询来从Google Analytics数据中收集页面上的时间

时间:2016-10-12 14:30:13

标签: google-analytics google-bigquery

任何人都可以帮助使用BIgQuery SQL查询从Google Analytics数据中提取特定页面的页面时间吗?

对于访问过某个特定页面的每个访客我都希望该页面的页面时间。这样我就可以计算页面的中值时间而不是平均值。

我假设将需要visitorId,hits.hitsNumber和hits.time维度。此外,以下点击的点击时间需要从某个方面查看点击页面的点击时间。

任何帮助都非常感激。

2 个答案:

答案 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 BYORDER 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"
)