[GA4] BigQuery verilerine dayalı kitleler için örnek sorgular

BigQuery'ye aktardığınız Firebase verilerinde belirli kitle sorguları gerçekleştirebilirsiniz.

Bu makalede, sorgularınızda temel olarak kullanabileceğiniz birkaç şablon sunulmaktadır. Örnek sorguları değiştirerek kendi verilerinize uygun hale getirmeyi unutmayın (ör. tablo adlarını ve tarih aralıklarını değiştirin).

Bu sorgular, kitledeki kullanıcı sayısını döndürür. Kullanıcı sayısı yerine kitledeki User-ID'lerin listesini almak isterseniz en dıştaki COUNT() işlevini çıkarın. Yani COUNT(DISTINCT user_id) ifadesini DISTINCT user_id biçimine dönüştürün.

Bu sorgular Standart SQL kullandığından sorgu çalıştırmadan önce bu seçeneği işaretlediğinizden emin olun. (BigQuery > SQL Çalışma alanı'na giderek Diğer > Sorgu Ayarları'nı tıklayın. Ek Ayarlar > SQL dili altında Standart'ı seçin.)

An itibarıyla yalnızca bilgilendirme amaçlı olan bu kitle verileri üzerinde işlem yapılamaz.

Bu sorgu örneklerini yararlı bulup bulmadığınızı veya başka kitle türlerini sorgulamak isteyip istemediğinizi bize bildirebilirsiniz. Firebase destek ekibinden özellik isteğinde bulunarak yanıt verebilirsiniz.

 

Bu makalede ele alınan konular:

Alıcılar

/**
 * Alıcılar kitlesini hesaplar.
 *
 * Alıcı sayısı = in_app_purchase veya purchase etkinliği
 * gerçekleştirmiş kullanıcıların sayısı.
 */
 
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 gün boyunca etkin olan kullanıcılar

/**
 * N Gün Boyunca Etkin Olan Kullanıcılar kitlesini oluşturur.
 *
 * N gün boyunca etkin olan kullanıcılar = son N gün içinde engagement_time_msec > 0 etkinlik parametresiyle
 * en az bir etkinlik gerçekleştirmiş olan kullanıcılar.
*/

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 gün boyunca etkin olmayan kullanıcılar

/**
 * N Gün Boyunca Etkin Olmayan Kullanıcılar kitlesini oluşturur.
 *
 * N gün boyunca etkin olmayan kullanıcılar = son M gün içindeki kullanıcılardan son N gün içinde  
 * engagement_time_msec > 0 etkinlik parametresiyle etkinlik gerçekleştirmemiş olanlar 
 * (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;
  
  

Sıklıkla etkin olan kullanıcılar

/**
 * Sıklıkla Etkin Olan Kullanıcılar kitlesini oluşturur.
 *
 * Sıklıkla Etkin Olan Kullanıcılar = Son M günün son N günü içinde
 * engagement_time_msec > 0 etkinlik parametresiyle en az 
 * bir etkinlik gerçekleştirmiş kullanıcılar (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
  );

  

Son derece etkin olan kullanıcılar

/**
 * Son Derece Etkin Olan Kullanıcılar kitlesini oluşturur.
 *
 * Son derece etkin olan kullanıcılar = Son M gün içinde
 * N dakikadan daha uzun süre etkin olan kullanıcılar (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
  );

  

Edinilen kullanıcılar

/**
 * Edinilen Kullanıcılar kitlesini oluşturur.
 *
 * Edinilen Kullanıcılar = Kaynak/Aracı/Kampanya ile edinilen kullanıcılar.
 */
 
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';
  
  

Filtreli kohortlar

/**
 * Bir önceki hafta Google kampanyalarıyla edinilen kullanıcılardan
 * oluşan bir kitle (filtreli kohort) oluşturur.
 *
 * Kohort, bir önceki hafta (7-14 gün önce)
 * edinilen kullanıcılar şeklinde tanımlanır. Kohort filtresi doğrudan türündeki kampanyalarla
 * edinilen kullanıcılar içindir.
 */
 
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';
  
  

Bu size yardımcı oldu mu?

Bunu nasıl iyileştirebiliriz?
Arama
Aramayı temizle
Aramayı kapat
Ana menü
12908741875773042571
true
Yardım Merkezinde Arayın
true
true
true
true
true
69256
false
false