Google Analytics (分析) 中的不重複計數

Google Analytics 開發人員服務代表 Minhaz Kazi – 2022 年 10 月

要衡量大型資料集的精確計數 (即基數),就需要 並會影響效能Google Analytics 4 資源使用的 HyperLogLog++ (HLL++) 演算法,預估常用指標的基數 包括「活躍使用者」和「工作階段」。舉例來說,當您查看有效 Google Analytics UI 中的使用者和透過 Data API 進行的計數 會是約略值。針對這些指標使用 HLL++ 可確保較佳 並取得更準確的預測結果這個 網誌文章詳細說明 HLL++ 在 Google Analytics 4 資源中的用法 以及如何使用 BigQuery 事件匯出功能複製估算結果 資料。

關於 HLL++

HLL++ 可「估算」基數,同時減少使用記憶體並提升效能。 HLL++ 透過 HyperLogLog 演算法進行增強, HyperLogLog 實踐:藝術國家的演算法工程 基數估算演算法。HLL++ precision 參數中的變更 比較記憶體用量與計算出的統計資料的準確性。提高 參數值可以降低錯誤,但會增加記憶體消耗量。

BigQuery 中的不重複計數實作

  • 使用 COUNT(DISTINCT) 測量確切基數。這種做法 會增加記憶體執行時間,需要更長的執行時間,大型資料集更是如此。
  • APPROX_COUNT_DISTINCT 會使用 HLL++ 估算結果。不過 「APPROX_COUNT_DISTINCT」不允許使用者設定概略值 準確度。
  • 如要使用自訂 precision 值,請使用 HyperLogLog++ 函式。詳情請見 針對許可 precision 值和可信度的 HLL++ 草圖 提供一般精確度的間隔
  • sparse precision 是 HLL+ 的另一個參數。在 BigQuery 中,sparse precision 值無法由使用者定義,且固定在 precision + 5 中。

在 Google Analytics 4 資源中導入 HLL++

Google Analytics 4 會使用下列設定來評估 相關的指標

指標 precision sparse precision
工作階段 12 17
活躍使用者 14 25
使用者總數 14 25

搭配 Google Analytics 事件資料使用 BigQuery HLL++ 函式

如果 BigQuery 有 Google Analytics 4 資源的事件資料, 可以嘗試比對 UI 的指標與 BigQuery 資料。下列範例 假設:

  • Google Analytics 4 的報表 ID 已設為「By device only」 資源。
  • 其他造成差異的可能原因,例如:已經為報表時區 並予以解決

使用者總數

使用 COUNT(DISTINCT) 的確切計數:

SELECT
  COUNT(DISTINCT user_pseudo_id) AS exact_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

使用 APPROX_COUNT_DISTINCT 的概略數量:

SELECT
  APPROX_COUNT_DISTINCT(user_pseudo_id) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

您可以使用 BigQuery HLL++ 函式複製 APPROX_COUNT_DISTINCT。這個 會傳回與 APPROX_COUNT_DISTINCT 相同或非常類似的結果:

SELECT
  HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 15)) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

最後,請使用 precision = 14,在 Google Analytics UI 中複製資料:

SELECT
  HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

活躍使用者

如要從 BigQuery 事件匯出資料表計算「活躍使用者」數量,您必須先 只篩選出「活躍使用者」的事件即可。執行 Active 使用者篩選器超出本文範圍。

WITH ActiveUsers AS
(
  SELECT
    user_pseudo_id
  FROM
    `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
  WHERE
  <implement active user filter logic>
)
SELECT
  HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS active_user_count,
FROM ActiveUsers

工作階段

ga_session_id 事件參數用來識別個別工作階段的個別工作階段, user_pseudo_idga_session_id 的組合會 不重複工作階段的不重複值這是標準的方法 計算 Google Analytics 4 資源的工作階段數。工作階段:precision 12。

SELECT
  HLL_COUNT.EXTRACT(
    HLL_COUNT.INIT(
      CONCAT(
        user_pseudo_id,
        (SELECT `value` FROM UNNEST(event_params) WHERE key = 'ga_session_id' LIMIT 1).int_value),
      12)) AS session_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

您可以在這篇網誌文章中使用查詢功能,並搭配基本查詢進階查詢範例,從 BigQuery 事件取得額外的深入分析結果 匯出 Google Analytics 4 資源的資料如果你的資源 大量事件資料;您也可以實作 HLL++ 函式 估算 BigQuery 中常用其他指標的基數 舉個簡單的例子,您可以定義情境 並指示 AI 如何回應服務中心查詢進一步瞭解 HLL++,以及基數運算為何昂貴 如想查看大型資料集,請參閱 Cloud 網誌上的深入網誌文章: 使用 HLL++ 加快大量資料集中計數的速度