[GA4] 查詢範例:根據 BigQuery 資料對目標對象進行查詢

您將 Firebase 資料匯出至 BigQuery 之後,就可以在該資料中針對特定目標對象進行查詢。

本文提供一些範本讓您做為建立查詢的依據,使用時別忘了根據您的資料細節修改查詢範例,例如變更表格名稱及日期範圍。

這些查詢會傳回目標對象的人數。如果您想要改為列出目標對象中的使用者 ID,請移除最外端的 COUNT() 函式,例如 COUNT(DISTINCT user_id) --> DISTINCT user_id。

這些查詢使用標準 SQL,因此請務必先選取該選項再執行查詢 (在「BigQuery」>「SQL 工作區」中,按一下 [更多] > [查詢設定],然後在 [其他設定] > [SQL 方言] 下方,選取 [標準])。

目前這份目標對象資料僅供參考,請勿根據這些資料採取行動。

我們很想知道這些查詢範例對您來說是否實用,以及您是否有其他類型的目標對象想要查詢;歡迎您填寫 Firebase 支援表單提出功能建議。

 

本文內容

購買者

/**
 * 計算由購買者組成的目標對象。
 *
 * 購買者 = 有 in_app_purchase 或
 * purchase 記錄的使用者。
 */
 
SELECT
  COUNT(DISTINCT user_id) AS purchasers_count
FROM
  -- PLEASE REPLACE WITH YOUR TABLE NAME.
  `YOUR_TABLE.events_*`
WHERE
  event_name IN ('in_app_purchase', 'purchase')
  -- PLEASE REPLACE WITH YOUR DESIRED DATE RANGE
  AND _TABLE_SUFFIX BETWEEN '20180501' AND '20240131';
  
  

N 天活躍使用者

/**
 * 根據 N 天活躍使用者建立目標對象。
 *
 * N 天活躍使用者 = 在最近 N 天內記錄到有至少一個事件 (含有事件參數 
 * engagement_time_msec > 0) 的使用者。
*/

SELECT
  COUNT(DISTINCT user_id) AS n_day_active_users_count
FROM
  -- PLEASE REPLACE WITH YOUR TABLE NAME.
  `YOUR_TABLE.events_*` AS T
    CROSS JOIN
      T.event_params
WHERE
  event_params.key = 'engagement_time_msec' AND event_params.value.int_value > 0
  -- Pick events in the last N = 20 days.
  AND event_timestamp >
      UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 20 DAY))
  -- PLEASE REPLACE WITH YOUR DESIRED DATE RANGE.
  AND _TABLE_SUFFIX BETWEEN '20180521' AND '20240131';
  
  

N 天不活躍使用者

/**
 * 根據 N 天不活躍使用者建立目標對象。
 *
 * N 天不活躍使用者 = 最近 M 天內,有 N 天未記錄到任何有 
 * 事件 (含有事件參數 engagement_time_msec > 0) 的使用者 
 * (其中 M > N)。
 */

 
SELECT
  COUNT(DISTINCT MDaysUsers.user_id) AS n_day_inactive_users_count
FROM
  (
    SELECT
      user_id
    FROM
      /* PLEASE REPLACE WITH YOUR TABLE NAME */
      `YOUR_TABLE.events_*` AS T
    CROSS JOIN
      T.event_params
    WHERE
      event_params.key = 'engagement_time_msec' AND event_params.value.int_value > 0
      /* Has engaged in last M = 7 days */
      AND event_timestamp >
          UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY))
      /* PLEASE REPLACE WITH YOUR DESIRED DATE RANGE */
      AND _TABLE_SUFFIX BETWEEN '20180521' AND '20240131'
  ) AS MDaysUsers
-- EXCEPT ALL is not yet implemented in BigQuery. Use LEFT JOIN in the interim.
LEFT JOIN
  (
    SELECT
      user_id
    FROM
      /* PLEASE REPLACE WITH YOUR TABLE NAME */
      `YOUR_TABLE.events_*`AS T
    CROSS JOIN
      T.event_params
    WHERE
      event_params.key = 'engagement_time_msec' AND event_params.value.int_value > 0
      /* Has engaged in last N = 2 days */
      AND event_timestamp >
          UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 DAY))
      /* PLEASE REPLACE WITH YOUR DESIRED DATE RANGE */
      AND _TABLE_SUFFIX BETWEEN '20180521' AND '20240131'
  ) AS NDaysUsers
  ON MDaysUsers.user_id = NDaysUsers.user_id
WHERE
  NDaysUsers.user_id IS NULL;
  
  

經常活躍使用者

/**
 * 根據經常活躍使用者建立目標對象。
 *
 * 經常活躍使用者 = 過去 M 天內,有 N 天記錄到至少有一個事件
 * (含有事件參數 engagement_time_msec > 0) 的使用者 
 * (其中 M > N)。
 */

 
SELECT
  COUNT(DISTINCT user_id) AS frequent_active_users_count
FROM
  (
    SELECT
      user_id,
      COUNT(DISTINCT event_date)
    FROM
      -- PLEASE REPLACE WITH YOUR TABLE NAME.
      `YOUR_TABLE.events_*` AS T
    CROSS JOIN
      T.event_params
    WHERE
      event_params.key = 'engagement_time_msec' AND event_params.value.int_value > 0
      -- User engagement in the last M = 10 days.
      AND event_timestamp >
          UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY))
      -- PLEASE REPLACE YOUR DESIRED DATE RANGE.  For optimal performance
      -- the _TABLE_SUFFIX range should match the INTERVAL value above.
      AND _TABLE_SUFFIX BETWEEN '20180521' AND '20240131'
    GROUP BY 1
    -- Having engaged in at least N = 4 days.
    HAVING COUNT(event_date) >= 4
  );

  

非常活躍使用者

/**
 * 根據非常活躍使用者建立目標對象。
 *
 * 非常活躍使用者 = 過去 M 天內,
 * 使用時間超過 N 分鐘的使用者 (其中 M > N)。
*/

SELECT
  COUNT(DISTINCT user_id) AS high_active_users_count
FROM
  (
    SELECT
      user_id,
      event_params.key,
      SUM(event_params.value.int_value)
    FROM
      -- PLEASE REPLACE WITH YOUR TABLE NAME.
      `YOUR_TABLE.events_*` AS T
    CROSS JOIN
      T.event_params
    WHERE
      -- User engagement in the last M = 10 days.
      event_timestamp >
          UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY))
      AND event_params.key = 'engagement_time_msec'
      -- PLEASE REPLACE YOUR DESIRED DATE RANGE.
      AND _TABLE_SUFFIX BETWEEN '20180521' AND '20240131'
    GROUP BY 1, 2
    HAVING
      -- Having engaged for more than N = 0.1 minutes.
      SUM(event_params.value.int_value) > 0.1 * 60 * 1000000
  );

  

招攬到的使用者

/**
 * 根據招攬到的使用者建立目標對象。
 *
 * 招攬到的使用者 = 透過某些來源/媒介/廣告活動招攬到的使用者。
 */
 
SELECT
  COUNT(DISTINCT user_id) AS acquired_users_count
FROM
  -- PLEASE REPLACE WITH YOUR TABLE NAME.
  `YOUR_TABLE.events_*`
WHERE
  traffic_source.source = 'google'
  AND traffic_source.medium = 'cpc'
  AND traffic_source.name = 'VTA-Test-Android'
  -- PLEASE REPLACE YOUR DESIRED DATE RANGE.
  AND _TABLE_SUFFIX BETWEEN '20180521' AND '20240131';
  
  

篩選出的同類群組

/**
 * 根據過去一週透過 Google 廣告活動招攬到的使用者建立目標對象,
 * 例如篩選出的同類群組。
*
 * 同類群組是指過去一週 (即 7 至 14 天前) 招攬到的
 * 使用者。同類群組篩選器是用於透過直接廣告活動招攬到的
 * 使用者。
 */
 
SELECT
  COUNT(DISTINCT user_id) AS users_acquired_through_google_count
FROM
  -- PLEASE REPLACE WITH YOUR TABLE NAME.
  `YOUR_TABLE.events_*`
WHERE
  event_name = 'first_open'
  -- Cohort: opened app 1-2 weeks ago. One week of cohort, aka. weekly.
  AND event_timestamp >
      UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 14 DAY))
  AND event_timestamp <
      UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY))
  -- Cohort filter: users acquired through 'google' source.
  AND traffic_source.source = 'google'
  -- PLEASE REPLACE YOUR DESIRED DATE RANGE.
  AND _TABLE_SUFFIX BETWEEN '20180501' AND '20240131';
  
  

這對您有幫助嗎?

我們應如何改進呢?
搜尋
清除搜尋內容
關閉搜尋
主選單
17629403192987237970
true
搜尋說明中心
true
true
true
true
true
69256
false
false