GA4 + Lookerで自社サイトのデータ分析をやってみる

Webマーケティングの最新のプラットフォームとして注目されているGA4ですが、Google Cloud PlatformのDWH、BigQueryとデータの自動連携を行うことが可能です。
この機能を利用して、同じくGoogleのBIツール、Lookerに自社サイトデータを分析したB2Bマーケのダッシュボードを作成します。

| ワークフロー | 内容 |
| --- | --- |
| [1.BigQueryの準備](#1bigqueryの準備) | BigQueryの初期設定を行います |
| [2.GA4 <> BigQueryの連携](#2ga4--bigqueryの連携) | 自動連携の設定を行います |
| [3.GA4データの前処理](#3ga4データの前処理) | Lookerで分析できるように、ARRAY型のデータのUNNESTなどデータの前処理を行います |
| [4.BigQuery <> Looker連携](#4bigquery--looker連携) | BigQueryのテーブルとLookerを連携します |
| [5.LookML作成](#5lookml作成) | Lookerのデータモデリング言語、LookMLをコーディングし、データモデルを作成します |
| [6.Lookerダッシュボード作成](#6lookerダッシュボード作成) | GA4データをLookerで可視化し、分析を行います |
| [7.振り返り](#7振り返り) | 感想と課題 |

## 初めに
今回対象として自社サイトのGA4データを使用します。
自社サイトのコンテンツが実際にどれくらい閲覧されているか、コンバージョンに繋がっているか、といったデータを可視化/分析して、マーケティングの効果向上に活用していく狙いです。

## **1.BigQueryの準備**

Google Cloud Platformで新規プロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/acc61acf-a6fb-3415-27a1-a36c06e63fae.png)
APIとサービス > ライブラリよりBigQueryAPIの有効化を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/071d2bd7-32ea-f473-bb06-bc61a6ec5587.png)
## 2.GA4 <> BigQueryの連携

GA4の管理画面からBigQueryのリンク設定を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/68cb4c22-3e1c-4391-ecac-91ba4c6ce0eb.png)
プロジェクト/データロケーションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/fd16c7e7-0b63-4aa8-0ca2-bdbbe79f875b.png)
データ連携の頻度を選択します。
> 毎日：1日1回のデータ連携。日次でデータが蓄積されていきます。
> ストリーミング：ほぼリアルタイムでデータが連携されます。ただしデータは1日で破棄されるので、当日限定です。

基本的には毎日を選択、リアルタイム分析も行いたい場合は毎日・ストリーミングの両方選択するのがベターです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/c60b57b9-d6c4-5de3-cd26-666b3ce2c4db.png)
連携設定後、1~2日ほどで指定したBigQueryにGA4のデータセットが作成されます。
データは連携設定後からの期間のデータとなるため、自動連携の設定は早期に行うことを推奨します。
## 3.GA4データの前処理

連携したデータは1行で完結する形ではなく、ARRAY型の構造となっており、SELECT文でのアクセスやBIツール上での可視化ができない状態のため、
BigQueryのUNNEST句を用いて、データの前処理を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/8f5b673b-f593-d43b-2b93-a0a27b637f46.png)
UNNEST句とは下図のように、ネストを解除して1行のフラットなデータ構造に変換する処理です。ただしこれだとネストしていないフィールドが重複する、データが縦に伸びる形になってしまうため、注意が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/b0aa623b-bca6-0a4f-091f-90788f090b82.png)
今回はこのようなSQLで、SELECT句の中にサブクエリを用いて、取得したいevent_paramsのkey/valueを指定、event_paramsをフラット化した結果、データが横に伸びる形で、非ネストフィールドが重複しないように抽出します。
```sql
SELECT event_date,event_name,device.mobile_brand_name,traffic_source.medium,traffic_source.source,
(SELECT value.string_value FROM UNNEST(event_params) as params WHERE params.key = 'page_title') as page_title,
(SELECT value.string_value FROM UNNEST(event_params) as params WHERE params.key = 'page_location') as page_location,
(SELECT value.string_value FROM UNNEST(event_params) as params WHERE params.key = 'page_referrer') as page_referrer,
(SELECT value.int_value FROM UNNEST(event_params) as params WHERE params.key = 'engaged_session_event') as engaged_session_event
FROM `{{GCP_PROJECT_ID}}.analytics_251826987.events_*`
```
クエリの結果、page_viewなどのイベントごとにevent_paramsの内容をフラット化して抽出できました。今回はこのSQLをview化してLookerに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/b2bcacae-f390-e0b1-b4fc-7a5158e5784e.png)
## 4.BigQuery <> Looker連携

Looker上でデータベースの接続を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/0b833dee-8111-1d55-842c-83365116f6a9.png)
新規LookMLプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/4e2bde70-2699-00ff-2ff9-420c4c91f614.png)
テーブルからビューを作成する、より先程接続したBigQueryのviewを指定。
LookMLのビューを生成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/8bea6906-1302-93e5-9ea3-5d516dc8910d.png)
## 5.LookML作成

LookMLのビューに下図のような各イベントの回数をカウントする指標を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/0dc15958-df10-5613-f764-057d97dd8819.png)
続いてLookMLのモデルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/e6edf7d9-f827-41f0-cd9f-8fe9222de857.png)
Gitの構成より、プロジェクトのGitリポジトリの構成を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/05c0425c-5346-0d0f-4f49-8bf2bc2dc01a.png)
Lookerからgithubに移動（githubのアカウント作成が必要です）
githubでリポジトリを作成し、LookerのGitの構成画面で作成したリポジトリを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/ad302bb0-3554-a856-cb78-ed7f530ec723.png)
Looker上でGitリポジトリのデプロイキーが発行されるので、githubのAdd deploy keyよりデプロイキーを入力します。これでGitの構成は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/3e08c773-9ca7-40ad-5141-5057e4286c78.png)
早速、LookMLをコミットしてデプロイします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/2ea57398-a256-a4c3-4a7f-8b7c5e999062.png)
## 6.Lookerダッシュボード作成

先程デプロイしたLookMLを基にディメンションとメトリクスを組み合わせて、ダッシュボードに表示するタイル作りを行います。
下図では流入元別のKPIを表示するタイルを作成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/3100c291-63ed-c7ed-c7ab-bfb8647fd29e.png)
作成したタイルをダッシュボード上に配置、日付のフィルターを設定したり、内容をブラッシュアップしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/b22ba5ef-3e03-885f-3f1b-132e8e8e2d9a.png)
▷日付/メディア/ソースのページフィルターの追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/e7151265-71e9-bcf0-4ad6-305f4e05616b.png)
▷ビューにdrill_fieldsを設定して、Lookerのグラフをクリックした時にドリルダウン表示ができるようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/8ee9f26e-efcd-dad4-4319-dc9a33dbbc43.png)
新規ユーザー数のバーをクリックすると、新規ユーザーのメディア/ソースをドリルダウン表示。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/7a4f290c-1e49-70d7-4fcc-46ae36a32856.png)
さらにいくつかタイルを作成して、
自社サイトの集客状況のOverviewを把握するダッシュボードができました。
集客力の高いコンテンツ、問い合わせ効率の高い流入元など、B2Bマーケでとりあえず知りたい情報を1ページにまとめています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374914/264fdcfb-9bc3-13bc-89d2-d1d76d7139a8.png)
## 7.振り返り

 いくつか感想・・・
・Googleサービスのみで構築しているためかとにかくスムーズ。比較的簡単に見やすいダッシュボードを構築する段までいける
・Lookerはやっぱり表示のレスポンスの速さ、見た目の良さ、できることの多さ（カスタマイズ性）に優れている
・これだけサイトの集客状況を明らかにできるのであれば、マーケティングの取り組みがいがありそう。。

これからより作り込みたい点・・・
・LookerのLiquid変数を使って、可変的に数値を期間比較できるような項目の実装
・ページフィルターのクロスフィルタリング
・セッションIDを使って、問い合わせに至っている経路の可視化。また問い合わせに至りやすい経由ページの可視化