如何为 BigQuery 中的 GA 数据创建基于页面和事件的转化渠道

Posted

技术标签:

【中文标题】如何为 BigQuery 中的 GA 数据创建基于页面和事件的转化渠道【英文标题】:How to create a conversion funnel based on pages and events for GA data in BigQuery 【发布时间】:2021-09-06 09:11:04 【问题描述】:

我在 BigQuery 中有以下数据:

date            fullVisitorId                              sessionId   hitNumber    type                      url   eventCategory   eventAction    eventLabel
20210101   973454546035798949   973454546035798949162783837520210101           1    PAGE             homepage.com            Null          Null          Null 
20210101   973454546035798949   973454546035798949162783837520210101           2   EVENT    homepage.com/purchase            View          Book  Harry_Potter
20210101   973454546035798949   973454546035798949162783837520210101           3   EVENT    homepage.com/purchase        Purchase          Book  Harry_Potter
...       

我想创建一个基于 URL 和事件的转化漏斗,不一定是顺序的。例如,我想计算不同用户数 (fullVisitorId) 和不同会话数 (sessionId),其中:

    用户访问了主页 (homepage.com)。 然后触发了具有类别View、操作Book 和标签Harry_Potter 的事件, 然后触发了具有类别Purchase、操作Book 和标签Harry_Potter 的事件。

同样,命中不一定是连续的,这意味着对于这 3 个步骤,命中数可能分别为 1、4 和 8。此外,实际所需的步骤数超过 10 个。

理想情况下,最终结果应如下所示:

    Type          Date   Step 1  Step 2  Step 3  Step 4
   Users    01/01/2021      120     110      90     ...
   Users    02/01/2021      130      80      70     ...
Sessions    01/01/2021      200     120     100     ...
Sessions    02/01/2021      220      80      70     ...

其中Step 1Step 2Step 3 表示完成特定步骤的用户数和会话数。

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

您必须在 SQL 代码下方执行类似的操作。对于每个条件,你都可以有一个 CTE,然后加入。

WITH STEP1 AS
(
SELECT fullVisitorId, Date, SUM(hitNumber) AS STEP1
FROM `data-to-insights.ecommerce.all_sessions_raw`
WHERE STARTS_WITH(url, "homepage.com") AND fullVisitorId IS NOT NULL
GROUP BY fullVisitorId, Date
),
STEP2 AS 
(
SELECT fullVisitorId, Date, SUM(hitNumber) AS STEP2
FROM `data-to-insights.ecommerce.all_sessions_raw`
WHERE eventCategory = 'View'  AND eventAction = 'Book' AND eventLabel = 'Harry_Potter' AND fullVisitorId IS NOT NULL
GROUP BY fullVisitorId, Date
),
STEP3 AS 
(
SELECT fullVisitorId, Date, SUM(hitNumber) AS STEP3
FROM `data-to-insights.ecommerce.all_sessions_raw`
WHERE eventCategory = 'Purchase'  AND eventAction = 'Book' AND eventLabel = 'Harry_Potter' AND fullVisitorId IS NOT NULL
GROUP BY fullVisitorId, Date
),
JOINED_DATA AS
(
SELECT  'Users' AS Type,
        coalesce(SUB_QUERY.Date,STEP3.Date),
        STEP1.STEP1,
        STEP2.STEP2,
        STEP3.STEP3
FROM    STEP3 FULL OUTER JOIN
        (
        SELECT  coalesce(STEP1.fullVisitorId,STEP2.fullVisitorId) AS fullVisitorId,
                coalesce(STEP1.Date,STEP2.Date) AS Date
        FROM STEP1 FULL OUTER JOIN STEP2 
        ON STEP1.DATE = STEP2.DATE AND STEP1.fullVisitorId = STEP2.fullVisitorId
        ) AS SUB_QUERY 
        ON STEP3.fullVisitorId = SUB_QUERY.fullVisitorId AND STEP3.Date = SUB_QUERY.Date
)
SELECT * FROM JOINED_DATA

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。 是的,请提供更多详细信息。例如,将命中数相加的原因是什么? 詹姆斯,我对缺乏数据感到困惑。我们仍然可以使用相同的代码并使用 MAX 而不是 SUM。它应该解决目的。 在 JOINED DATA 中您选择了 STEP1.STEP1 和 STEP2.STEP2,但在 FROM 子句中没有 STEP1 或 STEP2。

以上是关于如何为 BigQuery 中的 GA 数据创建基于页面和事件的转化渠道的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery GA360链接数据集不在项目中

BigQuery 中的自动数据集?

bigquery中的GA4流量源数据不正确

如何为 BigQuery 表中的记录生成唯一键值?

Bigquery中的firebase / GA4数据是不是会追溯更改

如何为 Google BigQuery 转义 JavaScript UDF 中的字符?