この記事はGoogle Analytics 4ではなく、Universal Analyticsを対象としています。
課題
Google Analytics(UA)にはユーザーごとの行動を分析できるユーザーエクスプローラーという機能がありますが、ヒット数の多いプロパティでは動作が重くなってしまうため安定した利用が難しい状態です。
例えば以下のようなエラーが頻発することもあります。
というわけでユーザーエクスプローラーで実施していたuidベースの行動観察をBigQueryでのクエリ発行で代替してみます。
カスタムディメンションにuidをセット
Google Analyticsのヒットにuidを紐づけるため、フロントエンド側でdataLayer配列に一意のuidをセットします。
var dataLayer = dataLayer || [];
dataLayer.push({
uid: '1234567890abcdefg'
});
GTM側でこの値を拾いページビューヒット・イベントヒットにuidを紐付けることになります。
なお、dataLayer変数はOptimizeのターゲティング条件としても利用できるため、Optimize関連のタグより上部の位置で記述することをおすすめします。
SQLで抽出
やっていることは単純で、ヒット時間・ページパス・ヒットタイプ・イベントカテゴリ・イベントアクション・イベントラベルと「カスタムディメンションにセットしたをuid」を抽出しているだけです。
WITH
raw_data AS(
SELECT
DATETIME(TIMESTAMP_SECONDS(visitStartTime + CAST((hits.time / 1000) AS int64)),
'Asia/Tokyo')AS time,
page.pagePath,
hits.type,
hits.eventInfo.eventCategory,
hits.eventInfo.eventAction,
hits.eventInfo.eventLabel,
(
SELECT
MAX(
IF
(index=1,
value,
NULL))
FROM
UNNEST(hits.customDimensions)) AS uid
FROM
`projectName.datasetName.ga_sessions_*`,
UNNEST(hits) AS hits
WHERE
_table_suffix BETWEEN "20210101"
AND "20210101" )
SELECT
* EXCEPT (uid)
FROM
raw_data
WHERE
uid IN ("1234567890abcdefg")
ORDER BY
time DESC
※index=1
の箇所はGoogle Analytics側で設定している当該カスタムディメンションのインデックス番号を指定します。
このクエリはユーザーエクスプローラーで言うところのページビューとイベントを抽出しているイメージですね。
目標設定をしていたりeコマーストラッキングしている場合には、それらも併せて抽出するといいと思います。
抽出結果
表データとして時系列の行動ログを抽出することができました。
SQLなので、カスタムディメンションやカスタムメトリクスの値、セッション番号等も柔軟にカラム追加することができます。
ユーザーエクスプローラーではページパスを確認するためには都度アコーディオンを開く必要がありますが、BigQueryでは表形式になるため一覧性が高くなると思います。
※BigQueryのWEB UIでは1度に200行しか表示できないため、クエリ結果が見づらい場合にはGoogleスプレッドシートへのエクスポートをおすすめします。
GA4でも同じことをしたい
GA4でも「分析ハブ」の中にGUIとしてのユーザーエクスプローラーはありますが、今回のようにSQLベースでも抽出できるようにしたいと考えています。
ただ、自動イベントのpage_view
のユーザープロパティに対してuidをセットできないことがあったりで、対応策がまだ思いつかない状態です。
運用してみた感想
今回の方法にてCS問い合わせの追跡調査やユーザー理解(定性分析)のための行動分析を実施していますが、GAのGUIからBigQueryに切り替えることで確実にスピード感が上がりました。(ディスカッション → 画面を見ながらの検証 の繰り返しをテンポよく進められるようになりました)
Google Analytics(ヒット数の多いプロパティ)を使う場合、カスタムセグメントの作成に2分、ユーザーエクスプローラー側で当該セグメントのログを表示させるのに2分以上かかることもありますが、BigQueryであればGUIの操作が不要でクエリの結果も20秒以内には返却されます。カスタムセグメントの作成をWHERE句に置き換えられることもメリットの一つだと思います。そして各クエリがコード化・モジュール化されることで分析の再現性も高まりますし、バージョン管理も可能になります。
ユーザーエクスプローラーに限らずカスタムレポートでもそうですが、GUIではなくSQLの方がレスポンスが速いだけでなく他者への展開も楽になる(敷居が下がる)のではないかと思いました。