はじめに
こんにちは。GameWith のエンジニアの m です!
このブログはアドベントカレンダーの22日目のブログになります!
今回は Google Analytics 4 property について記事を書きます!
GA4とは
2020年10月14日に正式リリースされた次世代版の Google アナリティクスです。
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への転送やストレージの料金は発生します)
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モード)
のカラムに格納されます。
クエリをもとにどんなデータ構造になっているかを紹介します。
event_name と event_paramsだけのテストテーブルを用意
イベントパラメータのvalueは内部的に STRING型
INTEGER型
FLOOT型
に分かれています。
今回は簡略化して以下のようにスキーマを定義しました。
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レコードに複数のイベントパラメータが存在することがわかります。
イベントパラメータのネストを解除するには以下のようにクエリを発行します。
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クエリ内であればよしなにキャッシュしてくれるので処理されるデータ容量は変わりません。
終わりに
GA4がデフォルトのプロパティとなり、今後は集中して機能拡張されていくみたいです。
UAの終了日はまだアナウンスされていないですが、早めに並行稼働を進めていくことが推奨されています。
スムーズに移行できるよう一緒に準備していきましょう!
GameWithのDeveloper向けTwitterアカウントも開設しました。
ブログの更新情報などを発信するので良かったらフォロー宜しくお願いします!