BigQueryでユーザー・流入元を分析するクエリ集

本ページのSQLを利用する前に、利用前の確認事項を必ずご確認ください。自社のプロジェクトIDとプロパティIDをfrom句に設定してからクエリを実行してください。

このページでは、BigQueryを使ってGA4のユーザー属性や流入元を分析するクエリを紹介します。初回訪問日、参照元/メディア、地域、デバイス情報など、ユーザーの特性を把握するためのSQL集です。

8:初回訪問日ごとのユーザー数を出す

select
    extract(date from timestamp_micros(user_first_touch_timestamp)at time zone "Asia/Tokyo") as day_first_touch,  -- user_first_touch_timestampという初回訪問時間が記録されている列から日付を抽出する
    count(distinct user_pseudo_id) as users  -- 該当日付のユニークなユーザー数をカウント
from
    `ha-ga4.analytics_227084301.events_*`    -- データの選択範囲。ここでは全期間とし、whereの部分で日付を指定する
where
    _table_suffix between '20220201' and '20220205'  -- 日付の指定
group by
    day_first_touch  -- 日付でグルーピングする
having 
    day_first_touch is not null   -- タイムスタンプがnullではないという条件を満たす事で空白を除外
order by
    day_first_touch -- 日付で並び替え

実行結果

9:流入元ごとのユーザー数を出す

(2022/10/06補足追記)下記の例に関しては、初回流入の流入元ごと(traffic_sourceは初回流入元のフィールド名)のユーザー数になります。セッションの参照元を取得したい場合は24番目の例をご覧ください。

select
    traffic_source.source,-- 参照元を抽出
    traffic_source.medium,-- メディアを抽出
    traffic_source.name as campaign, -- キャンペーン名を抽出しcampignと名付ける
    count(distinct user_pseudo_id) as users -- ユニークなユーザー数
 
from
    `ha-ga4.analytics_227084301.events_*`    -- データの選択範囲。ここでは全期間とし、whereの部分で日付を指定する
where
    _table_suffix between '20220201' and '20220205'  -- 日付の指定
group by
    source,  -- 参照元でグルーピング
    medium,  -- メディアでグルーピング
    campaign  -- キャンペーンでグルーピング
order by
    users desc  -- ユーザー降順で並び替え

実行結果

10:参照元 / メディアのように項目を繋げる

select
    concat(traffic_source.source, " / ", traffic_source.medium) as source_medium, -- concat関数で2つのsourceとmediumを「/」でつなぐ
    count(event_name) as sessions -- 後ほど指定するイベント名の列の見出しを「sessions」にする
from
    `ha-ga4.analytics_227084301.events_*`    -- データの選択範囲。ここでは全期間とし、whereの部分で日付を指定する
where
    _table_suffix between '20220201' and '20220205'  -- 日付の指定
    and event_name = 'session_start'  -- イベント名がsession_startに合致するものだけを抽出
group by
   source_medium  -- source_mediumでグルーピング
order by
   sessions desc  -- ユーザー降順で並び替え

実行結果

11:都道府県別のユーザー数を出す

select
    geo.country,  -- 国を指定
    nullif(geo.region,'') as region,  -- 地域(都道府県)を指定。空白の場合はnullに置き換える
    nullif(geo.city,'') as city,   -- 都市を指定。空白の場合はnullに置き換える
    count(distinct user_pseudo_id) as users
 
from
    `ha-ga4.analytics_227084301.events_*`    -- データの選択範囲。ここでは全期間とし、whereの部分で日付を指定する
where
    _table_suffix between '20220201' and '20220205'  -- 日付の指定
    and geo.country = 'Japan'  -- 国が日本のみを指定
group by
    country,  -- 国でグルーピング
    region,  -- 都道府県でグルーピング
    city  -- 市でグルーピング
order by
    users desc  -- ユーザー降順で並び替え

実行結果

12:デバイスやブラウザ別の情報を取得

select
    device.category,
    device.operating_system,
    device.operating_system_version,
    device.language,
    device.web_info.browser,
    device.web_info.browser_version,
    device.web_info.hostname,
    count(distinct user_pseudo_id) as users
 
from
    `ha-ga4.analytics_227084301.events_*`    -- データの選択範囲。ここでは全期間とし、whereの部分で日付を指定する
where
    _table_suffix between '20220201' and '20220205'  -- 日付の指定
group by 
    category,
    operating_system,
    operating_system_version,
    language,
    browser,
    browser_version,
    hostname
order by
    users desc  -- ユーザー降順で並び替え

実行結果

13:パラメータの値のユニーク数を取得

select
    count(distinct (select value.int_value from unnest(event_params) where key = 'ga_session_id')) as session_id_count -- ga_session_idパラメータのユニーク数(distinct)をカウントする(count)。unnestでパラメータ値を展開する必要があります
from
    `ha-ga4.analytics_227084301.events_*`    -- データの選択範囲。ここでは全期間とし、whereの部分で日付を指定する
 
where
    _table_suffix between '20220201' and '20220205' -- 日付の指定

ここではga_session_id(セッションに割り当てられるパラメータ値)をカウントしています。

実行結果

参考:session_idは訪問した時間を元に生成されています。そのため同時にアクセスがあった場合、同じsession_idの値が2人のユーザーに紐づいてしまいます。そこで厳密にセッションを出す場合は、user_pseudo_idとsession_idを組み合わせた上でのユニークな件数を見る必要があります。そのための記述と実行結果は以下の通りとなります。

select
    date(timestamp_micros(event_timestamp),"Asia/Tokyo") as date, -- イベントの発生日付を選択
    count(distinct ecommerce.transaction_id) as transactions, --トランスアクション数をカウント
    sum(ecommerce.purchase_revenue) as purchase_revenue --売上を集計
from
    `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`    -- データの選択範囲。ここでは全期間とし、whereの部分で日付を指定する
where
    _table_suffix between '20210101' and '20220131'  -- 日付の指定
group by 
    date --日付グルーピング
order by
    date --日付昇順で並び替え

実行結果(2つの値が違う事が分かります。後者の方がより厳密なセッション数です)


👉 GA4用のBigQuery クエリ集 目次に戻る

前のページ: 基本クエリ(1〜7)

次のページ: eコマース・イベント分析クエリ(14〜20)

参考になりましたか?

Google Analytics 4のセミナー講座販売中
活用・実装・改善・LookerStudioなど3時間半で学べる動画+資料を買い切り販売中です。一度購入いただくと、随時アップデートも行われます。