【GA4】page:A(ランディング) -> B -> C 遷移パターン セッション数ランキングを作る SQL

    サイト内をどのように遷移するセッションが多いのか知ることは、サイトのUI改善に役立つ可能性があります。

    今回は、GoogleがBigQueryで提供している、GoogleのECサイトの公開サンプルデータを使って、

    ページ遷移パターンセッション数ランキングを作って見たいと思います。

    要件としては、

    • ランディング→次→その次の3ページ分の遷移パターンを調べます。

    • ランキングには、3ページ未満のセッションも含めます。(直帰もランキングに入れます。)

    • リロードすると、同一ページが続いてしまいますが、データとして面白くないので、リロード分は1回の閲覧として集計します。

    クエリの実行結果は、こちらのスプレッドシートでご覧いただくことができます。

    https://docs.google.com/spreadsheets/d/1Ny9_whHwM1fbJTJ1-faWrYUzw2yTOGR9Uc4Tsjv2KJ8/edit?usp=sharing

    直帰も含めたランキングになっております。

    下記にご紹介するクエリは、BigQueryサンドボックス + GoogleがBigQueryで提供している、GoogleのECサイトの公開サンプルデータを使って、無料でお試しいただくことができます。

    BigQueryサンドボックス + GoogleがBigQueryで提供している、GoogleのECサイトの公開サンプルデータを使う方法は、こちらにまとめてあります。

    https://bit.ly/3ZfMv2m

    GitHubにも同じクエリを置きました。

    https://github.com/nakata1967/ga4sql/blob/main/sequence.sql

    WITH
      Sequenced AS (
      SELECT
        user_pseudo_id,
        ARRAY_AGG(page_location
        ORDER BY
          event_timestamp) AS pages
      FROM (
        SELECT
          event_timestamp,
          user_pseudo_id,
          event_param.value.string_value AS page_location
        FROM
          `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`,
          UNNEST(event_params) AS event_param
        WHERE
          _TABLE_SUFFIX BETWEEN '20201101'
          AND '20221110'
          AND event_name = 'page_view'
          AND event_param.key = 'page_location' )
      GROUP BY
        user_pseudo_id ),
      DistinctSequenced AS (
      SELECT
        user_pseudo_id,
        ARRAY(
        SELECT
          DISTINCT page
        FROM (
          SELECT
            pages[
          OFFSET
            (n)] AS page,
          IF
            (n=0, NULL, pages[
            OFFSET
              (n-1)]) AS previous_page
          FROM
            UNNEST(GENERATE_ARRAY(0, ARRAY_LENGTH(pages) - 1)) AS n
          WHERE
            pages[
          OFFSET
            (n)] !=
          IF
            (n=0, NULL, pages[
            OFFSET
              (n-1)]) ) ) AS filtered_pages
      FROM
        Sequenced
      WHERE
        ARRAY_LENGTH(pages) > 0 ) -- 統合したランキングの生成
    SELECT
      filtered_pages[SAFE_OFFSET(0)] AS landing,
    IF
      (ARRAY_LENGTH(filtered_pages) > 1, filtered_pages[SAFE_OFFSET(1)], NULL) AS next_page,
    IF
      (ARRAY_LENGTH(filtered_pages) > 2, filtered_pages[SAFE_OFFSET(2)], NULL) AS next_next_page,
      COUNT(user_pseudo_id) AS sessions
    FROM
      DistinctSequenced
    WHERE
      ARRAY_LENGTH(filtered_pages) > 0
    GROUP BY
      landing,
      next_page,
      next_next_page
    ORDER BY
      sessions DESC
    LIMIT
      100;

    Webサイトのユーザー動向を解析するための一般的な方法として、どのページを訪れ、次にどのページに遷移したかという情報を取得することが考えられます。今回、BigQueryでこのような解析を行うSQLクエリの解説を行います。

    BigQueryのWITH句は、サブクエリの結果セットに名前を付けて、後続のクエリでその名前を使って参照できるようにするものです。これを使用することで、複雑なクエリを段階的に組み立てることができます。

    2-1. Sequencedという名前のサブクエリ

    この部分では、各ユーザーごとに、ユーザーが訪れたページの順序のリストを作成しています。そのため、ARRAY_AGG関数を使用して、event_timestampの順にpage_locationを集約しています。

    2-2. DistinctSequencedという名前のサブクエリ

    この部分での主な目的は、連続して同じページをリロードした場合、それを1つのページビューとしてカウントすることです。UNNESTGENERATE_ARRAYを使い、各ユーザーのページ遷移を行ごとに展開しています。

    3. 最終的なランキングの取得

    ここで、上記の2つのサブクエリの結果を元に、ランディングページ、次のページ、次の次のページの組み合わせごとのセッション数をカウントしています。

    SAFE_OFFSETは、配列のインデックスが存在しない場合にエラーを回避するための関数です。これにより、2ページまたは1ページだけのセッションでもクエリが正しく動作します。

    4. まとめ

    このクエリを使用することで、ユーザーのページ遷移の動向をランキング形式で取得できます。リロードによる同じページの連続的なアクセスはカウントされませんので、実際のページ遷移のみが考慮される点が特徴です。


    最後まで読んで頂き、ありがとうございました。

    アンド,エー株式会社
    facebookTwitterDiscord

    and,a株式会社(and,a Inc. アンド,エー株式会社)

    〒153-0063 東京都目黒区目黒1-4-16 目黒Gビル7階

    Copyright © 2017-2024 and,a Inc. All Rights Reserved.