GameWith Developer Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

Google Analytics 4 property(GA4)でできるようになったこととTips #GameWith #TechWith

はじめに

こんにちは。GameWith のエンジニアの m です!

このブログはアドベントカレンダーの22日目のブログになります!

qiita.com

今回は Google Analytics 4 property について記事を書きます!

GA4とは

2020年10月14日に正式リリースされた次世代版の Google アナリティクスです。

support.google.com

Firebase向け Google アナリティクス(FA)をもとに、イベントベース測定モデルに変更されています。

個人的に大きく変わったと思う点と、GA4利用上のTipsを紹介します。

従来の Google アナリティクスは、ユニバーサルアナリティクス(UA)と記載して区別します。

変わった点

ウェブとアプリのデータを一つのプロパティでみられるようになった

FAのデータストリームを連携することで、相互にデータを同期することができます。

後述するBigQueryでも同じテーブルとして扱うことができるので、プラットフォームを跨いだ分析が容易になります。

イベントのデータ構造が柔軟になった

UAではカテゴリ、アクションのように予め大きな項目が決められており、カスタムディメンションも事前に定義が必要でした。

GA4では事前定義を必要とせず、各イベントごとにパラメータを自由に設定することができます。

UAのデータ構造

  • イベントカテゴリ
  • イベントアクション
  • イベントラベル
  • カスタムディメンション
    • (プロパティに事前定義が必要な)ユーザー定義のkey value

GA4のデータ構造

  • イベント名
  • イベントパラメータ
    • ユーザー定義のkey value
  • ユーザープロパティ
    • ユーザー定義のkey value

大規模サービスでも無料で利用しやすくなった

UAはヒット数(ページビューやイベントの発火)に制限があり、 月のヒット数が1,000万以上になると、有償版へのアップグレードが必要でした。

GA4にはイベント数(ヒット数)にあたる制限がありません。

今現在、有償版がないので確定ではありませんが、イベント単位のリッチさ(パラメータの定義数、文字数など)が課金のポイントになりそうです。

BigQueryとの連携が簡単になった

UAでは有償版のGA360でしか提供されていなかったBigQueryへのエクスポート機能が利用できます。(BigQueryへの転送やストレージの料金は発生します)

support.google.com

GAのデータはAPI経由でアクセスすると値が丸められる影響で実数値の分析が難しいですが、 BigQueryでは各イベントがレコード単位で分かれているので、加工や分析が容易になります。

スケジュールタスクを作成し、自動でイベント名ごとに別テーブルに分割して参照しやすくすることもできます。

Tips

user idについて

GA4のデータをBigQueryにエクスポートした際のテーブルスキーマには、トップレベルに user_id カラムが存在します。

ウェブでイベントパラメータのキー名に user_id を設定しておくと、自動でトップレベルにも値が入るようになります。

また、user idがない場合でも、 user_pseudo_id というカラムに自動でCookie管理のIDが振られるので、 サービス側に識別IDがない場合は、こちらをもとに行動分析が可能です。

イベントパラメータのBigQueryテーブルスキーマについて

イベントパラメータは event_params という RECORD型(REPEATEDモード) のカラムに格納されます。

support.google.com

クエリをもとにどんなデータ構造になっているかを紹介します。

event_name と event_paramsだけのテストテーブルを用意

イベントパラメータのvalueは内部的に STRING型 INTEGER型 FLOOT型 に分かれています。

今回は簡略化して以下のようにスキーマを定義しました。

f:id:takuya_minami373:20201222161435p:plain

INSERT

RECORD型のデータを挿入する場合は、STRUCT を使って構造を明示する必要があります。

REPEATEDモード なので ARRAY の記載で複数の値の格納が可能です。

INSERT
  `PROJECT_ID.DATASET_NAME.TABLE_NAME` (event_name, event_params)
VALUES
  ("event_name1", ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64>>>[
    ("key1",STRUCT<string_value STRING,int_value INT64>('value1', NULL)),
    ("key2",STRUCT<string_value STRING,int_value INT64>('value2', NULL))
  ]);

SELECT

SELECT
  *
FROM
  `PROJECT_ID.DATASET_NAME.TABLE_NAME`
WHERE
  event_name = 'event_name1';

普通に抽出すると画像のように1レコードに複数のイベントパラメータが存在することがわかります。 f:id:takuya_minami373:20201222161344p:plain

イベントパラメータのネストを解除するには以下のようにクエリを発行します。

SELECT
  event_name,
  (SELECT value.string_value FROM UNNEST(event_params) where key = "key1") as key1,
  (SELECT value.string_value FROM UNNEST(event_params) where key = "key2") as key2,
FROM
  `PROJECT_ID.DATASET_NAME.TABLE_NAME`
WHERE
  event_name = 'event_name1';

これでフラットなレコードに整形されるので扱いやすくなりました。

サブクエリがある分、参照データが多くなってしまうように見えますが、 1クエリ内であればよしなにキャッシュしてくれるので処理されるデータ容量は変わりません。

f:id:takuya_minami373:20201222161453p:plain

終わりに

GA4がデフォルトのプロパティとなり、今後は集中して機能拡張されていくみたいです。

UAの終了日はまだアナウンスされていないですが、早めに並行稼働を進めていくことが推奨されています。

スムーズに移行できるよう一緒に準備していきましょう!

Twitter

GameWithのDeveloper向けTwitterアカウントも開設しました。

ブログの更新情報などを発信するので良かったらフォロー宜しくお願いします!

twitter.com