---
title: GA4 日次新規ユーザー数集計クエリの解剖
tags: 
author: [渋谷TAIZI](https://convert.docswell.com/user/4514287294)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/57GLYVGDEL.jpg?width=480
description: GA4 日次新規ユーザー数集計クエリの解剖 by 渋谷TAIZI
published: March 28, 26
canonical: https://convert.docswell.com/s/4514287294/ZQ28WY-2026-03-28-155007
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/57GLYVGDEL.jpg)

GA4 日次新規ユーザー数 集計クエリの解剖
BigQueryにおけるSQLアーキテクチャと処理プロセスの構造的理解

# Page. 2

![Page Image](https://bcdn.docswell.com/page/4EQYM6XXJP.jpg)

Block 1: 期間の設定
(一時関数の定義)
Zen Kaku Gothic New. 一時関数
を定義し、指定したデータの定義を
つくること、期間の限定を言う可能で
す。
CREATE TEMP FUNCTION date_from() RETURNS STRING AS (&#039;20260301&#039;);
CREATE TEMP FUNCTION date_to() RETURNS STRING AS (&#039;20260331&#039;);
WITH NewUU_Daily AS (
SELECT
PARSE_DATE(&#039;%Y%m%d&#039;, event_date) AS ymd,
COUNT(DISTINCT user_pseudo_id) AS _new_uu
FROM
&lt;project&gt;.&lt;dataset&gt;.events_*
WHERE
event_name = &#039;first_visit&#039;
AND _TABLE_SUFFIX BETWEEN date_from() AND date_to()
GROUP BY ymd
ORDER BY ymd
)
SELECT * FROM NewUU_Daily
Block 2: データの抽出と
加工 (CTEメイン処理)
Zen Kaku Gothic New. Common
Table Expression (CTE)
&#039;NewUU_Daily&#039;を作成し、データ
の抽出加工に関したデータを選択。
またにしたデータを選択し、日時切
バースを掘り、日数の初ユーザーで
抽出されたデータをする。
&#039;first_visit&#039;イベントを抽出できる
るなど、演算したデータを混して
AND _TABLE_SUFFIX BETWEEN
を徹底する。
Block 3: 集計と並べ替え
(構造化)
Zen Kaku Gothic New. 日数と
毎日の新しいユーザーされた日時
(ymd)を集計した... (UU)を登進
化した。最後、結果の結果により、
日見を並替えする。
Block 4: 最終出力
(実行)
Zen Kaku Gothic Newでクエリ
フを実行すると、定義的なCTE分の
毎日の新しいユーザーデータを実行
する。

# Page. 3

![Page Image](https://bcdn.docswell.com/page/KJ4WV46271.jpg)

期間の設定：メンテナンス性の担保
CREATE TEMP FUNCTION date_from() RETURNS STRING AS (&#039;20260301&#039;);
CREATE TEMP FUNCTION date_to() RETURNS STRING AS (&#039;20260331&#039;);
WITH NewUU_Daily AS (
SELECT
PARSE_DATE(&#039;%Y%m%d&#039;, event_date) AS ymd,
COUNT(DISTINCT user_pseudo_id) AS _new_uu
FROM
&lt;project&gt;.&lt;dataset&gt;.events_*
WHERE
event_name = &#039;first_visit&#039;
AND _TABLE_SUFFIX BETWEEN date_from() AND date_to()
GROUP BY ymd
ORDER BY ymd
)
SELECT * FROM NewUU_Daily
Block 3: 集計と並べ替え
(構造化)
Zen Kaku Gothic New. 日数と
毎日の新しいユーザーされた日時
(ymd)を集計した... (UU)を登進
化した。最後、結果の結果により、
日見を並替えする。
Control Panel
date_from()
20260301
date_to()
20260331
・開始日と終了日を一時的
な関数として先頭で定義。
・クエリ深層部の日付を直
接書き換えるリスクを排
除。
価値
運用時の変更箇所を先頭の
2行に集約し、保守性を劇
的に向上。

# Page. 4

![Page Image](https://bcdn.docswell.com/page/LE1Y34VK7G.jpg)

スキャン範囲の最適化：コスト削減と高速化
CREATE TEMP FUNCTION date_from() RETURNS STRING AS (&#039;20260301&#039;);
CREATE TEMP FUNCTION date_to() RETURNS STRING AS (&#039;20260331&#039;);
WITH NewUU_Daily AS (
SELECT
PARSE_DATE(&#039;%Y%m%d&#039;, event_date) AS ymd,
COUNT(DISTINCT user_pseudo_id) AS _new_uu
FROM
&lt;project&gt;.&lt;dataset&gt;.events_*
WHERE
event_name = &#039;first_visit&#039;
AND _TABLE_SUFFIX BETWEEN date_from() AND date_to()
GROUP BY ymd
ORDER BY ymd
)
SELECT * FROM NewUU_Daily
0228 0301 0302 ... 0331 0401
&lt;project&gt;.&lt;dataset&gt;.events_*
・GA4データは日別のテーブ
ル(events_YYYYMMDD)と
して保存される。
・_TABLE_SUFFIXを利用し、
指定期間内のテーブルの
みをスキャン対象に制限。
価値
不要なデータの読み込みを
回避し、クエリ料金の節約と
処理の高速化を同時に実現。

# Page. 5

![Page Image](https://bcdn.docswell.com/page/GEWGPXLPJ2.jpg)

Minimap 30%
CREATE TEMP FUNCTION date_from()
RETURNS STRING AS (&#039;20260301&#039;);
CREATE TEMP FUNCTION date_to()
RETURNS STRING AS (&#039;20260331&#039;);
WITH NewUU_Daily AS (
SELECT
PARSE_DATE(&#039;%Y%m%d&#039;, event_date) AS ymd,
COUNT(DISTINCT user_pseudo_id)
AS _new_uu
FROM
&lt;project&gt;.&lt;dataset&gt;.events_*
WHERE
event_name = &#039;first_visit&#039;
AND _TABLE_SUFFIX BETWEEN
date_from() AND date_to()
GROUP BY ymd
ORDER BY ymd
)
SELECT * FROM NewUU_Daily
Main Stage 70%
ターゲット抽出：新規アクセスの特定
page_view
scroll
page_view
scroll
first_visit
page_view
New Users
・GA4の仕様上、ユーザー
初回訪問時にのみ
first_visit イベントが
記録される。
・無数のイベント群から
この特定イベントのみ
を抽出。
価値
行動データから「新規ユ
ーザー」という抽象的な
概念を正確に分離・抽出。

# Page. 6

![Page Image](https://bcdn.docswell.com/page/47ZLK6M6J3.jpg)

型変換：分析用フォーマットへの成形
WITH NewUU_Daily AS (
SELECT
PARSE_DATE(&#039;%Y%m%d&#039;, event_date) AS ymd,
COUNT(DISTINCT user_pseudo_id) AS
_new_uu
FROM
&lt;project&gt;.&lt;dataset&gt;.events_*
WHERE
event_name = &#039;first_visit&#039;
AND _TABLE_SUFFIX BETWEEN
date_from() AND date_to()
GROUP BY ymd
ORDER BY ymd
)
SELECT * FROM NewUU_Daily
STRING型
(文字列)
&#039;20260301&#039;
PARSE_DATE
DATE型
(ymd)
2026-03-01
・event_date は初期状態では単なる文
字列。
・PARSE_DATE 関数を用いて、システムが
認識できる日付型へと変換。
価値
後工程でのBIツール連携、
時系列グラフ化、日付ベース
の演算を可能にする。

# Page. 7

![Page Image](https://bcdn.docswell.com/page/YJ6WQ2NLJV.jpg)

Minimap 30%
CREATE TEMP FUNCTION date_from()
RETURNS STRING AS (&#039;20260301&#039;);
CREATE TEMP FUNCTION date_to()
RETURNS STRING AS (&#039;20260331&#039;);
WITH NewUU_Daily AS (
SELECT
PARSE_DATE(&#039;%Y%m%d&#039;, event_date) AS ymd,
COUNT(DISTINCT user_pseudo_id)
AS _new_uu
FROM
&lt;project&gt;.&lt;dataset&gt;.events_*
WHERE
event_name = &#039;first_visit&#039;
AND _TABLE_SUFFIX BETWEEN
date_from() AND date_to()
GROUP BY ymd
ORDER BY ymd
)
SELECT * FROM NewUU_Daily
Main Stage 70%
重複排除：正確なデバイス（ユーザー）数の算出
[ ID: A9X ]
[ ID: B2Y ]
[ ID: A9X ]
[ ID: C4Z ]
[ ID: A9X ]
DISTINCT
[ A9X ]
[ B2Y ]
[ C4Z ]
3
・user_pseudo_id はブラウザ単位で付
与される匿名ID。
・同日に同一ユーザーが複数回アクセス
するケースを想定。
価値
単純なカウントではなくDISTINCT
を用いることで、イベント数では
なく「何デバイス」アクセスした
かの正確な実数を保証。

# Page. 8

![Page Image](https://bcdn.docswell.com/page/GJ5MR25MJ4.jpg)

Minimap 30%
WITH NewUU_Daily AS (
SELECT
PARSE_DATE(&#039;%Y%m%d&#039;, event_date) AS ymd,
COUNT(DISTINCT user_pseudo_id) AS
_new_uu
FROM
&lt;project&gt;.&lt;dataset&gt;.events_*
WHERE
event_name = &#039;first_visit&#039;
AND _TABLE_SUFFIX BETWEEN
date_from() AND date_to()
GROUP BY ymd
ORDER BY ymd
)
SELECT * FROM NewUU_Daily
Main Stage 70%
集計と整列：データのタイムライン化
GROUP BY &amp; ORDER BY
Timeline (ymd)
・GROUP BY: 抽出したデータを日付
(ymd)ごとに集約。
・ORDER BY: 集約されたデータを古い
日付から順に並べ替え。
価値
データベースの無秩序なレコード
の集合を、人間が解釈可能な
「時系列のトレンドデータ」へと
昇華。

# Page. 9

![Page Image](https://bcdn.docswell.com/page/9E29D4NR7R.jpg)

Left Minimap
CREATE TEMP FUNCTION date_from()
RETURNS STRING AS (&#039;20260301&#039;);
CREATE TEMP FUNCTION date_to()
RETURNS STRING AS (&#039;20260331&#039;);
WITH NewUU_Daily AS (
SELECT
PARSE_DATE(&#039;%Y%m%d&#039;, event_date) AS ymd,
COUNT(DISTINCT user_pseudo_id) AS _new_uu
FROM
&lt;project&gt;.&lt;dataset&gt;.events_*
WHERE
event_name = &#039;first_visit&#039;
AND _TABLE_SUFFIX BETWEEN
date_from() AND date_to()
GROUP BY ymd
ORDER BY ymd
)
SELECT * FROM NewUU_Daily
Main Stage
メイン処理の実行：最終結果の呼び出し
CTE: NewUU_Daily
SELECT *
・これまでWITH句内で構築してきた
仮想テーブル NewUU_Daily を呼び出
す。
価値
複雑な処理ロジック(CTE内)と、
最終的な出力命令(SELECT文)を
分離することで、コード全体の可読
性を高く保つ。

# Page. 10

![Page Image](https://bcdn.docswell.com/page/D7Y42MP5EM.jpg)

Output: The Polished Data
最終的に生成されるデータセット。ノイズが排除され、コストが最適化された状態から抽出された、
正確な「日次新規ユーザー数」の推移。即座にBIダッシュボードやレポーティングに接続可能。
ymd _new_uu
2026-03-01 1,200
2026-03-02 1,150
2026-03-03 1,310
...

# Page. 11

![Page Image](https://bcdn.docswell.com/page/VENY8W54J8.jpg)

SQL Function
(ツール)
Mechanism
(処理機構)
Business Value
(アーキテクチャの目的)
TEMP FUNCTION 変数による一元管理 保守性・運用コストの低減
_TABLE_SUFFIX スキャン範囲の限定 クエリ料金節約・高速処理
COUNT(DISTINCT) IDの重複排除 精緻なユーザー実数の把握
PARSE_DATE 文字列から日付型への変換 ダッシュボード連携の容易さ
優れたSQLは単にデータを出すだけでなく、コスト、精度、保守性が構造的に設計されている。

