BigQueryでGA4とSearchConsoleのデータに曜日を付ける方法(を試してみた)

GTMのカスタムJavaScript変数で GA4 に曜日を計測実装する方法」を読んで、BigQueryで曜日を付けるというのをやってみたくなりやった。

※基本クエリは生成AIに聞いた。

EXTRACT(part FROM date_expression)

BigQueryの曜日を引っ張ってくる関数はこちら。

DAYOFWEEK: Returns values in the range [1,7] with Sunday as the first day of the week.
Date functions  |  BigQuery  |  Google Cloud Documentation

EXTRACT(DAYOFWEEK FROM 日付)で曜日の数字に変換。
JavaScriptの getDay() とは異なるっぽく、1〜7の数字で日曜日〜月曜日で返してくれます。

SearchConsole(BigQuery)×曜日

※基本的な形はGeminiに聞きました。

SELECT
data_date,
CASE EXTRACT(DAYOFWEEK FROM data_date)
WHEN 1 THEN ‘日’
WHEN 2 THEN ‘月’
WHEN 3 THEN ‘火’
WHEN 4 THEN ‘水’
WHEN 5 THEN ‘木’
WHEN 6 THEN ‘金’
WHEN 7 THEN ‘土’
END AS day_of_week,
sum(clicks) as sum_click
FROM
–テーブル名
`nanika-nageru.searchconsole.searchdata_site_impression`
WHERE
data_date > “2026-01-01”
group by 1,2
LIMIT 1000

結果。いい感じ!

曜日別の集計

ちょっと応用して12月の曜日別Google検索流入集計。

SELECT
CASE EXTRACT(DAYOFWEEK FROM data_date)
WHEN 1 THEN ‘日’
WHEN 2 THEN ‘月’
WHEN 3 THEN ‘火’
WHEN 4 THEN ‘水’
WHEN 5 THEN ‘木’
WHEN 6 THEN ‘金’
WHEN 7 THEN ‘土’
END AS day_of_week,
sum(clicks) as sum_click,
sum(impressions) as sum_impressions,
FROM
`nanika-nageru.searchconsole.searchdata_site_impression`
WHERE
data_date between “2025-12-01” and “2025-12-31”
group by 1
LIMIT 1000

結果。火曜日がもっとも多かった様子。※合計値

GA4(BigQuery)×曜日

曜日別のPV数。
GAはタイムゾーンを’Asia/Tokyo’に変更。

SELECT
— 1. event_timestampを日本時間に変換して曜日を抽出
CASE EXTRACT(DAYOFWEEK FROM DATE(TIMESTAMP_MICROS(event_timestamp), ‘Asia/Tokyo’))
WHEN 1 THEN ‘日’
WHEN 2 THEN ‘月’
WHEN 3 THEN ‘火’
WHEN 4 THEN ‘水’
WHEN 5 THEN ‘木’
WHEN 6 THEN ‘金’
WHEN 7 THEN ‘土’
END AS day_of_week,
COUNT(*) AS page_views
FROM
`baka-ke-ga4.analytics_316218666.events_*`
WHERE
event_name = ‘page_view’
AND _TABLE_SUFFIX BETWEEN ‘20260101’ AND ‘20260114’
GROUP BY
day_of_week,
EXTRACT(DAYOFWEEK FROM DATE(TIMESTAMP_MICROS(event_timestamp), ‘Asia/Tokyo’))
ORDER BY
EXTRACT(DAYOFWEEK FROM DATE(TIMESTAMP_MICROS(event_timestamp), ‘Asia/Tokyo’))

結果。

曜日別の集計

GSCは合計数を出したのでこっちは12月の平均を出します。

WITH daily_pvs AS (
— 1. まず「日単位」かつ「曜日番号」付きで集計する
SELECT
DATE(TIMESTAMP_MICROS(event_timestamp), ‘Asia/Tokyo’) AS d_date,
EXTRACT(DAYOFWEEK FROM DATE(TIMESTAMP_MICROS(event_timestamp), ‘Asia/Tokyo’)) AS dow_num,
COUNT(*) AS pvs
FROM
`baka-ke-ga4.analytics_316218666.events_*`
WHERE
event_name = ‘page_view’
AND _TABLE_SUFFIX BETWEEN ‘20251201’ AND ‘20251231’
GROUP BY
1, 2
)
— 2. 日別の結果を「曜日」でまとめて平均を出す
SELECT
CASE dow_num
WHEN 1 THEN ‘日’
WHEN 2 THEN ‘月’
WHEN 3 THEN ‘火’
WHEN 4 THEN ‘水’
WHEN 5 THEN ‘木’
WHEN 6 THEN ‘金’
WHEN 7 THEN ‘土’
END AS day_of_week,
AVG(pvs) AS avg_pv — ここで「日別PV」の平均が計算される
FROM
daily_pvs
GROUP BY
day_of_week,
dow_num
ORDER BY
dow_num

結果。

「なんで火曜日に多いんだろう???」と思ったらこれですね。
【役に立たない話】frameのサイトを作って色々検証した #バカ毛ラジオ

バカ毛ラジオでフレームのページを発火させまくっていたやつでしたw

一言

ノリでやりました!

ノリの元:GTMのカスタムJavaScript変数で GA4 に曜日を計測実装する方法

ブログへのサポートのお願い(アマゾンギフト)

いつも「バカに毛が生えたブログ」をご愛読いただきありがとうございます。

現在、このブログは皆様のおかげで無料・広告なし(※)で運営しております。
※AdSenseはセンシティブ判定されてしまうため、広告を掲載できません。

ブログの継続とさらなる充実のためご支援をお願いします。
支援は一度限りのショット支援として、¥150から可能です。

いただいた支援は、以下のような形で活用させていただきます:

  • サーバー費用やサイトの維持
  • 新しいコンテンツの作成
  • モチベーション

ご希望の方はスパチャ読みをいたしますので、その旨をお知らせください。

ご支援はより良いブログを提供するための力になります。

こちらのメールアドレスを送信先にしてください。
↓タップするとコピーされます

コメント

タイトルとURLをコピーしました