【问题标题】:How to create a conversion funnel based on pages and events for GA data in BigQuery如何为 BigQuery 中的 GA 数据创建基于页面和事件的转化渠道
【发布时间】: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),其中:

  1. 用户访问了主页 (homepage.com)。
  2. 然后触发了具有类别View、操作Book 和标签Harry_Potter 的事件,
  3. 然后触发了具有类别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 表示完成特定步骤的用户数和会话数。

有什么想法吗?谢谢!

【问题讨论】:

    标签: google-analytics google-bigquery


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多