GA4Query

お問い合わせ

GA4で各ページごとの離脱数を集計するSQLクエリ | GA4QUERY

公開日:2023年03月27日
更新日:2023年03月27日
GA4で各ページごとの離脱数を集計するSQLクエリ | GA4QUERY

本記事では、BigQueryにエクスポートしたGA4(Googleアナリティクス4)のデータを用いて、ウィンドウ関数( FIRST_VALUE 関数)を活用した各ページごとの離脱数を集計するSQLクエリについて解説をおこなう。サイトに訪れたユーザーが最終的にどのページでセッションを終えているのかを数値化することで、望ましいユーザー行動が起こっているかどうかを定量的に把握することができる。

SQLクエリの概要

まず離脱数に関しては、公式ヘルプで以下のように定義されている。

離脱数は、あるページまたは画面における 1 回のセッション内で発生した、最後のイベントの回数です。離脱率は、あるページまたは画面で終了したセッションの割合です(離脱数 ÷ セッション数として計算されます)。

出典 : [GA4] 閲覧開始数と離脱数

以下のクエリサンプルでは、「最後にページビューが発生」したページを離脱ページとして定義している。そして、セッション内の最後のページビューを特定するために、 FIRST_VALUE というウィンドウ関数を活用する。 sid 単位で区切り、 event_timestamp を降順で並び替えることで、 同一セッション内で最後にページビューイベントが発生した page_location を抽出することができる。

★オススメ★

LAST_VALUE を使えばいいのでは?という疑問が当然発生するが、 FIRST_VALUEDESC を組み合わせて使うほうが記述が少なく済むため、こちらの方法をオススメしている。

参考記事 : Window関数のLAST_VALUEの罠にハマった

セッション数の集計方法に関しては以下の記事を参考にしてほしい。

参考記事 : 日次のセッション数を集計するSQLクエリ | GA4QUERY

SQLクエリサンプル

今回のSQLサンプルは、以下のようになる。

WITH prep1 AS (
  SELECT
    CONCAT(user_pseudo_id, (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')) AS sid,
    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS page_location,
    event_timestamp,

  FROM
    `technogram-354804.analytics_291973511.events_intraday_202302*`

  WHERE
    event_name = 'page_view'
),
prep2 AS (
  SELECT
    sid,
    page_location,
    event_timestamp,
    FIRST_VALUE(CONCAT(page_location, event_timestamp)) OVER(PARTITION BY sid ORDER BY event_timestamp DESC) AS exit_page_location,

  FROM
    prep1
)
 
SELECT
  CASE WHEN CONCAT(page_location, event_timestamp) = exit_page_location THEN page_location ELSE NULL END AS exit_page_location,
  COUNT(DISTINCT sid) AS exit_count

FROM
  prep2

GROUP BY
  exit_page_location

HAVING
  exit_page_location IS NOT NULL

ORDER BY
  exit_count DESC
;

BigQueryでの集計結果

今回のSQLクエリの実行結果は、以下のようになった。

GA4(Googleアナリティクス4)探索画面での集計結果

また、GA4での探索画面での集計結果は、以下のようになった。

両者の数値は概ね一致していることがわかる。

BigQueryでの集計結果とGA4の探索画面での集計結果に、微妙な差異が発生する件については、以下の記事を参考にしていただきたい。

(参考記事)

[GA4] アナリティクスのセッションについて

UA、GA4、MAツールの数が合わない問題

ChatGPT(GPT-4モデル)によるクエリ解説

ChatGPTを使い、今回のSQLクエリについて解説を加えてみたい。

このSQLクエリは、指定されたデータセットから各ページの離脱回数(exit_count)をカウントし、降順に並べて表示するものです。クエリは以下のステップで構成されています。

1.WITH句を用いて、prep1という名前のサブクエリを作成します。このサブクエリでは、データセットからセッションID(sid)、ページのURL(page_location)、およびイベントのタイムスタンプ(event_timestamp)を取得しています。イベント名(event_name)が「page_view」であるレコードに限定しています。

2.prep1サブクエリの結果を用いて、prep2という名前のサブクエリを作成します。このサブクエリでは、セッションID(sid)、ページのURL(page_location)、イベントのタイムスタンプ(event_timestamp)を取得し、FIRST_VALUE関数を使って各セッションにおける最後のページのURLとタイムスタンプを連結した値(exit_page_location)を取得しています。これにより、各セッションの離脱ページを特定できます。

3.SELECT句を使って、prep2サブクエリから離脱ページのURL(exit_page_location)と離脱回数(exit_count)を取得します。各行において、ページのURLとタイムスタンプの連結が離脱ページのURLとタイムスタンプの連結と一致する場合、そのページのURLを離脱ページのURLとして取得します。それ以外の場合は、NULLを取得します。

4.離脱ページのURLでグループ化し、結果を離脱回数の降順で並べて表示します。この際、HAVING句を用いて、離脱ページのURLがNULLでないものに限定しています。

このクエリを実行することで、各ページの離脱回数を取得し、ECサイト運営者はユーザーがどのページでサイトを離れる傾向があるかを把握し、ページの改善や最適化を検討することができます。

今回は、ウィンドウ関数( FIRST_VALUE 関数)を活用した各ページごとの離脱数を集計するSQLクエリについて解説を行った。そして、サイトに訪れたユーザーが最終的に、どのページでセッションを終えているのかを数値化することで、望ましいユーザー行動が起こっているかどうかを定量的に把握した。

また、実行結果に加え、ChatGPTでのSQL解説も加えているので、SQLクエリの学習、あるいは実際に活用する際の参考にしてみてほしい。

この記事の執筆者

Akifumi Watanabe

Webディレクター・上級Web解析士。 Google Analytics Certification保有。 GA4Queryの記事作成担当。 Web分析を活かした制作ディレクションを中心に行う。 元制作者の目線を活かしweb改善に取り組む。