BigQueryにエクスポートしたGA4のデータと比較する

BigQueryにエクスポートしたGA4のデータの概要を把握する で、ある程度作りを把握したので、この記事ではBigQueryでクエリを書いて集計した結果とGA4のコンソールで表示した結果を見比べながら理解を深めていく。

イベントについて

GA4ではユーザーの行動(ページビュー、セッション開始、クリック等)は「イベント」として計測されている。
そこでまずはイベントの値として何が入っているかを見比べてみる。

[BigQuery側]
イベントはevent_name というカラムとして格納されている。

SELECT distinct(event_name)
FROM analytics_<property_id>.events_YYYYMMDD

イベントのイメージとしては、例えばユーザーがサイトにアクセスしたら session_start イベントと page_view イベントが発生し、さらに初回の訪問ならfirst_visit イベントも発生する。

[コンソール側]
管理 > プロパティ設定 > データの表示 > イベント より、設定しているイベントを確認できる。

BigQuery側とコンソール側でイベントが一致していることが確認できた。

なお、GA4のイベントには4種類あり、上記の7つのイベントは記載の区分に当てはまる。

  • 自動収集イベント:自動で計測される 今回だと first_visit, session_start
  • 拡張計測機能イベント:GA4管理画面上で有効にすると自動で計測される 今回だと page_view, scroll, click
  • 推奨イベント:ユーザーが設定するが、名前とパラメータがGoogleで定義されている
  • カスタムイベント:ユーザーが自由にイベント名を定義する 今回だと internal_link_click, top_page_view

[GA4] About events – Analytics Help

イベントの概観を確認できたので、以下でイベントを指定して値を集計してみる。

first_visit イベント

チャネルごとの新規ユーザー数
first_visitは初回の訪問時に発生するイベントなので、ある日に初めて訪問したユーザー数をチャネル別で集計してみる。

[BigQuery側]

SELECT
  traffic_source.name AS medium,
  COUNT(DISTINCT user_pseudo_id) AS new_users
FROM
  analytics_<property_id>.events_YYYYMMDD
WHERE
  event_name = "first_visit"
GROUP BY
  medium

※ ユーザー数について
COUNT(DISTINCT user_pseudo_id) でユーザー数を集計している。
以下確認より、user_pseudo_id はアクセスのあったユーザーのブラウザに割り当てられる一時的なID(同じユーザーでもブラウザが異なれば異なるIDとなる)と理解している。今回、user_pseudo_id はユーザーエクスプローラで「有効なユーザー ID」として表示される値と一致していた。

コンソール上で以下の説明があり、このサイトでは「ユーザー ID」の設定がなくウェブサイトのため、今回は実質「クライアント ID」であると解釈した。

有効なユーザー ID とは、ユーザーのブラウザ インスタンスまたはアプリのインストールに関連付けられている一意の ID です。Google アナリティクスではこの ID を使って、同一ユーザーのセッションによる訪問が識別されます。

有効なユーザー ID には、利用可能であればユーザー ID が使用されます。利用可能でない場合は、デバイス ID が使用されます。デバイス ID は、モバイルアプリのアプリ インスタンス ID またはウェブサイトのクライアント ID です。

[コンソール側]
ライフサイクル > 集客 > ユーザー獲得 より、ディメンションを「最初のユーザーのデフォルトチャネルグループ」に設定して確認

BigQuery側とコンソール側で、ユーザー数が一致していることが確認できた。

page_viewイベント

ページごとの表示回数とユーザー数
page_viewはサイト内のページにアクセスすると発生するイベントなので、ある日のページごとの表示回数とユーザー数を集計してみる。

[BigQuery側]

SELECT
  event_params.value.string_value AS page_path,
  COUNT(*) AS pageviews,
  COUNT(DISTINCT user_pseudo_id) AS users,
FROM
  analytics_<property_id>.events_YYYYMMDD
  ,UNNEST(event_params) AS event_params
WHERE
  event_name = 'page_view'
  AND event_params.key = 'page_location'
GROUP BY
  page_path

※ テーブルのつくりの確認
クエリだけだと理解しづらいので、使用しているカラムをプレビュー画面に記載した

※ ユーザー数については上記と同様

[コンソール側]
ライフサイクル > エンゲージメント > ページとスクリーン より確認

BigQuery側とコンソール側で数が一致していることが確認できた。

clickイベント

ある日に、どのページで何回クリックが発生したかをカウントしてみる。

[BigQuery側]

SELECT
  event_name,
  event_params.value.string_value as page_location,
  COUNT(*) AS click_count
FROM
  analytics_<property_id>.events_YYYYMMDD
  ,UNNEST(event_params) AS event_params
WHERE
  event_name = 'click'
  and event_params.key = "page_location"
GROUP BY
  event_name,
  page_location

[コンソール側]
探索 からレポートを作成し確認する。
ディメンション(行)としてページロケーション、指標(値)としてイベント数を指定して、フィルタでイベント名をclickにする。

BigQuery側とコンソール側で数が一致していることが確認できた。

まとめ

この記事では、BigQueryにエクスポートしたデータに対する集計結果とGA4のコンソールでの集計をイベントを切り口として比較した。今回の範囲ではBigQueryの集計とコンソールの集計が一致したが、試している中では一部微妙にずれる集計も存在したため、次にその要因と対応方法を確認したい。