首页 > 解决方案 > Big Query 中的 GA 漏斗分析 - “正确”的会话计数

问题描述

感谢您的光临!我很感激(重新)在 Big Query 中创建最终的 GA 会话漏斗。重点是每个会话的漏斗,在一个会话期间具有某些但不一定按顺序访问的页面。

查询的期望结果

该解决方案应将会话计为COUNT( DISTINCT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING))).

此外,漏斗应该是这样的形式,即只有在前一个步骤已经在会话中完成时才能到达每个漏斗步骤(例如,只有在会话期间访问了步骤 1-3 时才应计算第四步)。但是,这些步骤不需要连续执行

不幸的是,这就是为什么我非常喜欢这个示例对我不起作用的原因。它返回 的访问次数totals.visits。此外,我需要REGXP_CONTAINS用于页面,因为我的页面上没有用于渠道步骤的事件(或自定义维度)。对于原始查询(对于每个相应的步骤)

SUM((SELECT 1 FROM UNNEST(hits) WHERE eventInfo.eventAction = 'landing_page' LIMIT 1)) Landing_Page

我试过了:

COUNT( DISTINCT( SELECT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING)) FROM UNNEST(GA.hits) WHERE REGEXP_CONTAINS(hits.page.pagePath, r”myfunnelpage”)

但是,根据COUNT( DISTINCT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING))) AS overday_sessions.

另一个例子着眼于用户会话(我印象深刻,也绝对害怕,@Martin 的道具)据称,当我写这个#StuffGettingLostOnline 时,有一个网站应该全部关闭

我的方法看起来像这样。但它只返回具有单个页面视图的会话,而不是顺序的:

SELECT
  date,       
  COUNT( DISTINCT( SELECT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING)) FROM UNNEST(GA.hits) WHERE REGEXP_CONTAINS(hits.page.pagePath, r"productoverviewpage") LIMIT 1)) AS product_overview_s1,

  COUNT( DISTINCT( SELECT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING)) FROM UNNEST(GA.hits) WHERE EXISTS(SELECT 1 FROM UNNEST(GA.hitS) WHERE REGEXP_CONTAINS(hits.page.pagePath, r"productoverviewregex")) AND REGEXP_CONTAINS(hits.page.pagePath, cartoverviewregex") LIMIT 1)) AS cart_overview_s2

FROM 
 data as GA,
 UNNEST(GA.hits) AS hits
WHERE hits.type = "PAGE"
AND 
 TRUE IN UNNEST(
  [REGEXP_CONTAINS(hits.page.pagePath, r"productoverviewpage"),
  REGEXP_CONTAINS(hits.page.pagePath, r"cartoverviewregex""]
 )

有任何想法吗?任何人都能够使用“正确”的会话计数重新创建最终的大查询漏斗吗?

标签: google-analyticsgoogle-bigquery

解决方案


您可以使用内联子查询来检查漏斗的各个步骤:

WITH
  sessions AS (
  SELECT
    (
    SELECT
      hits
    FROM
      UNNEST(hits) hits
    WHERE
      hits.page.pagePath = "/"
    ) first_step,
    (
    SELECT
      hits
    FROM
      UNNEST(hits) hits
    WHERE
      hits.page.pagePath = "/basket"
    ) second_step
  FROM
    `project.dataset.ga_sessions_*`)
SELECT
  COUNT(first_step) sessions_step_one,
  COUNTIF(first_step.hitNumber < second_step.hitNumber) sessions_step_two
FROM
  sessions

推荐阅读