3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GoogleAnalyticsとBigQueryで行動観察

Last updated at Posted at 2021-05-09

この記事はGoogle Analytics 4ではなく、Universal Analyticsを対象としています。

課題

Google Analytics(UA)にはユーザーごとの行動を分析できるユーザーエクスプローラーという機能がありますが、ヒット数の多いプロパティでは動作が重くなってしまうため安定した利用が難しい状態です。

例えば以下のようなエラーが頻発することもあります。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373638392f33393436343862652d373430342d313164622d383630612d6266383330636261313535352e706e67.png
というわけでユーザーエクスプローラーで実施していた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側で設定している当該カスタムディメンションのインデックス番号を指定します。

このクエリはユーザーエクスプローラーで言うところのページビューとイベントを抽出しているイメージですね。

スクリーンショット 2021-05-05 17.40.png

目標設定をしていたりeコマーストラッキングしている場合には、それらも併せて抽出するといいと思います。

抽出結果

表データとして時系列の行動ログを抽出することができました。
スクリーンショット 2021-05-04 12.46.53.png
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の方がレスポンスが速いだけでなく他者への展開も楽になる(敷居が下がる)のではないかと思いました。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?