GameWith Developer Blog

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

New GA でレポーティングを行うTips #GameWith #TechWith

はじめに

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

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

qiita.com

今回は New GA について記事を書きます!

New GA とは

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

Google Analytics 4 property(GA4) としてリリースされましたが、正式名称は New Google Analytics(New GA) になるようです。

従来の ユニバーサルアナリティクス(UA)との違いは以下の記事でご紹介しています。

tech.gamewith.co.jp

New GA でデータ利用をする上での課題

アナリティクスのダッシュボードが使いづらいところが最大の課題だと思っています。

UAの 行動分析 であればディメンションを2つまで指定して、ページビューやイベントのデータをある程度簡単に視覚化することができ、より詳細なカスタムレポートを作成・共有することができました。

New GAでは エンゲージメント分析 で似たようなことができますが、パラメータ(ディメンションに相当)が1つしか指定できず、表示件数も少ないです。

データ探索 も使い勝手が悪いため柔軟に見やすいレポートを作るために、データポータルやBIツールを利用するケースが増えると思います。

今回はNew GAからBig Queryにデータをエクスポートし、データポータルで視覚化する際のTipsをご紹介します。

イベント設計時のTips

タグマネージャーを利用してパラメータを管理

New GAではタグマネージャーのタグタイプが 設定イベント に分かれています。

設定タグ はアナリティクスのプロパティIDを指定し、全ページに埋め込んでページビュー イベントの計測に利用します。

イベントタグ はクリックイベントなどを個別に定義するものですが、 設定タグ を紐づけることで 設定タグ のフィールドをイベントパラメータに引き継ぐことができます。

ユーザーIDなどの全てのイベントで共通して取得したいパラメータは 設定タグ で一元管理できるので管理がとても楽になります。

f:id:takuya_minami373:20211220093347p:plain
タグマネージャータグタイプ

文字数の長いパラメータの収集

UAのカスタムディメンションには文字数の制限がありませんでしたが、New GAのイベントパラメータは以下の制約があります。

項目 上限
パラメータ数 25
パラメータ名の長さ 40文字
パラメータ値の長さ 100文字

弊社ではユーザーエージェントがこの制約に引っかかりました。

元々はそのまま送信して集計側で分類していましたが、イベント送信前に細分化する方法に切り替えました。

イベントパラメータの値は STRING, INTEGER, FLOAT のいずれかに自動で型判別されます。

型の指定はできないため誤解が生じないよう is_xxx などBooleanで理解できるパラメータ名にして 1 or 0 で送信しています。

タグマネージャー内で 変数 > ユーザー定義変数 > JavaScript変数 を利用すれば分類を完結することも可能です。

イベント集計時のTips

可能な限り集約してテーブル化する

BigQueryのデータを利用する場合、データの参照量に応じて従量課金が発生します。

そのため、エクスポートしたデータを直接参照するのではなく、集約してテーブル化することでコストを抑えています。

デバイス情報関連では以下のカラムをグルーピングに使うことが多いです。

項目 説明
device.operating_system デバイスのOS iOS, Android, Windows
device.category デバイスカテゴリ mobile, desktop, tablet
device.web_info.browser ブラウザ Safari, Chrome, Safari (in-app)

テーブル化には洗い替え方式のスケジュールクエリを使う

スケジュールクエリは、ログテーブルの集約テーブル化を自動で行ってくれる機能です。 冪等性の担保するためのポイントが以下になります。

Query string

日時指定に@run_date または @run_time を用います。

これらはスケジュールクエリ実行時のDATE型 or TIMESTAMP型に変換されるパラメータです。

CURRENT_DATE() 等を使うとバックフィルの実行時にズレが発生しますがそれを防ぐことができます。

cloud.google.com

宛先テーブルの書き込み設定(Write preference)

WRITE_TRUNCATE に設定しテーブルのデータを上書きします。

上書きではなく追加( WRITE_APPEND )を設定してしまうとデータ重複する可能性があるため、テーブルを日付パーティションで分割して洗い替える運用にしています。

テーブル名(Destination table)

日付のパーティションを以下のフォーマットで設定します。

前日の日付でパーティションをきる例: TABLE_NAME${run_time-24h|"%Y%m%d"}

テーブルの日付フィールドをパーティションに指定することも可能です。 その場合はテーブル名の $ 以降の記述は不要で、以下の項目にフィールド名を入力します。

宛先テーブルのパーティショニング フィールド (Partitioning field)

単純な集約関数では要件を満たせない場合

SUM() AVG() などで問題がある場合は ARRAY_AGG() が便利です。

配列でデータを持つ

BigQueryは REPEATED モードのフィールドを使えば、複数のデータを1レコードに持つことが可能です。

ARRAY_AGG(hoge)

一意なデータにする

一度 ARRAY_AGG で配列にした後、 OFFSET(0) で一つだけ抽出することで実現できます。

DISTINCT や NULL除外、並び替えも ARRAY_AGG() 内でできるので便利です。

ARRAY_AGG(DISTINCT hoge IGNORE NULLS ORDER BY fuga DESC LIMIT 1)[OFFSET(0)]

終わりに

有償版の360も発表されNew GAがデフォルトのプロパティとなりつつあります。

UAと同じ使用感ですぐにNew GAを利用するのは難しいので、早めに並行稼働を開始して移行準備をして行きましょう!

Twitter

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

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

twitter.com