我需要在 BigQuery 上的 GA4 的同一会话期间触发的两个不同事件的事件参数

问题描述 投票:0回答:1
  1. 以下查询提取我需要的事件

    purchase
    的事件参数:

    SELECT
       event_date,
       event_name,
       traffic_source.medium,
       traffic_source.source,
       (
       SELECT
         value.string_value
       FROM
         UNNEST (event_params)
       WHERE
         KEY= 'form_id') AS form_id,
       (
       SELECT
         value.int_value
       FROM
         UNNEST(event_params)
       WHERE
         KEY = 'ga_session_id') AS session_id,
     FROM
       `table1`
     WHERE
       event_name = 'purchase'
    

enter image description here

  1. 这个其他查询取消了自定义事件的事件参数的嵌套,我需要将其与上面的

    purchase
    事件的寄存器连接起来:

    SELECT
       event_date,
       event_name,
       (
       SELECT
         value.int_value
       FROM
         UNNEST(event_params)
       WHERE
         KEY = 'ga_session_id') AS session_id,
       (
       SELECT
         value.string_value
       FROM
         UNNEST(event_params)
       WHERE
         KEY = 'campaign_id') AS experiment_id,
       (
       SELECT
         value.string_value
       FROM
         UNNEST(event_params)
       WHERE
         KEY = 'campaing_name') AS experiment_name,
       (
       SELECT
         value.string_value
       FROM
         UNNEST(event_params)
       WHERE
         KEY = 'variation_name') AS variantion_name 
         #COUNT(1) AS sessions
     FROM
       `table1`
     WHERE
       event_name ="kameleoon_experiment"
    

enter image description here

  1. 我们在两个查询中都有 event.key 的共同值
    ga_session_id

将相同“ga_session_id”的购买事件参数和自定义事件的事件参数加入同一行的查询是什么?

我目前正在单独下载查询结果,然后使用

ga_session_id
作为键来查找两个表。

google-bigquery google-analytics google-analytics-4
1个回答
0
投票

这取决于这两个事件之间是什么样的关系。 如果没有(不牢固)依赖关系,并且您只想将它们显示在一行中,那么您可以使用完全连接。

这应该看起来像:

WITH
  purchase AS (
  SELECT
    event_date,
    event_name,
    traffic_source.medium,
    traffic_source.source,
    (
    SELECT
      value.string_value
    FROM
      UNNEST (event_params)
    WHERE
      KEY= 'form_id') AS form_id,
    (
    SELECT
      value.int_value
    FROM
      UNNEST(event_params)
    WHERE
      KEY = 'ga_session_id') AS session_id,
  FROM
    `analytics_.events_*` gae --
  WHERE
    gae.event_name = "purchase"
)
,kameleoon_experiment AS (
  SELECT
    event_date,
    event_name,
    (
    SELECT
      value.int_value
    FROM
      UNNEST(event_params)
    WHERE
      KEY = 'ga_session_id') AS session_id,
    (
    SELECT
      value.string_value
    FROM
      UNNEST(event_params)
    WHERE
      KEY = 'campaign_id') AS experiment_id,
    (
    SELECT
      value.string_value
    FROM
      UNNEST(event_params)
    WHERE
      KEY = 'campaing_name') AS experiment_name,
    (
    SELECT
      value.string_value
    FROM
      UNNEST(event_params)
    WHERE
      KEY = 'variation_name') AS variantion_name
  FROM
    `analytics_.events_*` gae --
  WHERE
    gae.event_name = "kameleoon_experiment"
)
-- Join two tables in one row
SELECT
  pur.event_date,
  pur.event_name,
  pur.medium,
  pur.source,
  pur.form_id,
  pur.session_id,
  --kam.event_date,
  --kam.event_name,
  --kam.session_id,
  kam.experiment_id,
  kam.experiment_name,
  kam.variantion_name
FROM
  purchase pur
FULL JOIN
  kameleoon_experiment kam
ON pur.event_date = kam.event_date
  AND pur.session_id = kam.session_id ;

但通常,这两者之间存在某种关系(例如购买总是被触发,kameleoon_experiment 仅基于特定条件之后触发)。 在这种情况下,您应该使用“LEFT JOIN”或“INNER JOIN”来代替。

您可以查看有关此问题的一些帖子,即:https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/

© www.soinside.com 2019 - 2024. All rights reserved.