本ページの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つの値が違う事が分かります。後者の方がより厳密なセッション数です)
前のページ: 基本クエリ(1〜7)
次のページ: eコマース・イベント分析クエリ(14〜20)
