Google広告スクリプト「FROM」を理解し狙ったデータを取得

Google広告スクリプト
帰家
帰家

あれれ・・・なんでだ
同じ日付なのにデータが分かれてしまうぞ、、っ!

kabu
kabu

どうしました?

帰家
帰家

kabuさん・・・っ!
最近Google広告を始めたんですが、そのデータを「Google広告スクリプト」でスプレッドシートに落とそうとしたところ、思ったようにデータが取れなくて。。。

kabu
kabu

なるほど。
これはGoogle広告スクリプトの「FROM」句の沼にハマってしまったようですね。

kabu
kabu

では今回は
・「FROM」句とは
・データが分かれてしまう!?よくある「FROM」句のトラブル
・まとめ
ということで話していきたいと思います。

「FROM」句とは

kabu
kabu

「FROM」句とは、SQLでテーブルを指定する句(決まり文句、固定の書き方)になります。
Google広告スクリプトでは、SQLの書き方でデータを取得することができるため、この「FROM」句を使うことがあります。

帰家
帰家

え?・・・えと
・・・まず、SQLってなんでしょう??

kabu
kabu

SQLは、簡単にいうとデータベース(表組・テーブル形式にまとまったデータ群)を操作するための言語です。
広告のデータは、内部的にはテーブル(表組)のようにまとまっているので、SQLで取得するのに適しています。

kabu
kabu

「FROM」句という今回のテーマは、
Google広告スクリプト > SQL > 「FROM」句
という感じなので、かなりミクロな話しではありますね。

Google広告スクリプトで使用する、SQLの主な記載方法・構造

SELECT句

kabu
kabu

Google広告スクリプトで使うSQLの構造は、主に以下のような形で記載するケースが多いです。

SELECT segments.month, metrics.impressions FROM campaign WHERE metrics.impressions <> 0 ORDER BY segments.month DESC LIMIT 50

SELECT句では、出力する指標(segments や metrics)を指定します。
テーブル(表組)内の ”どの列” を出力するかSELECT句で指示するイメージです。
以下の指標はよく使いますね。

指標名説明データの形
campaign.nameキャンペーンの名前テキスト
ad_group.name広告グループの名前テキスト
gender_view.resource_name性別
「男性」、「女性」とかではない
テキスト
性別の識別ID
age_range_view.resource_name年齢
「18歳」とか「35歳」とかではなく、「18〜25歳」などの年齢帯で出力される
テキスト
年齢の識別ID
segments.deviceデバイス
「mobile」、「PC」、「tablet」など
テキスト
ad_group_criterion.keyword.text検索キーワードテキスト
search_term_view.search_term検索語句テキスト
metrics.impressions表示回数数値
metrics.clicksクリック数数値
metrics.conversionsコンバージョン数数値
metrics.cost_micros利用金額数値
一般的な数値の10^6されて出力される
帰家
帰家

大きなテーブルがあって・・・
その中の “出力する列を指定する”・・・という感じのイメージでしょうか
上の表の「データの形」とはどういう意味ですか?

kabu
kabu

「データの形」は、その指標がどんな状態の値を持っているかを示しています。
「campaign.name」なら、Google広告に設定してあるキャンペーン名、例えば「女性向け販促キャンペーン」や「首都圏ターゲットキャンペーン」など、”テキスト(文字列)” で登録されているはずです。
対して「metrics.impressions」では「10,000」、「6,500」など、”数値” が保存されています。
「gender_view.resource_name」と「age_range_view.resource_name」は少し特殊で、それ独自のIDが割り振られています。

FROM句

kabu
kabu

続いて、本記事のメインテーマ「FROM」についてです。

SELECT segments.month, metrics.impressions FROM campaign WHERE metrics.impressions <> 0 ORDER BY segments.month DESC LIMIT 50
帰家
帰家

「FROM」句の後には「campaign」という文字が続いてますね。

kabu
kabu

はい。
「FROM」句では、数ある中から “どのテーブル(表組)” を選ぶかを指定しています。

帰家
帰家

え・・・
テーブルっていくつもあるんですか??

よく使うテーブル説明
customerアカウントの全体データがまとまっているテーブル
campaignキャンペーン単位でデータがまとまっているテーブル
ad_group広告グループ単位でデータがまとまっているテーブル
gender_view性別単位でデータがまとまっているテーブル
age_range_view年齢単位でデータがまとまっているテーブル
search_term_view検索語句ごとでデータがまとまっているテーブル
kabu
kabu

よく使うテーブルの一例をまとめれば上の表のような感じです。
・・・例えば、家計簿のスプレッドシート を作ったとします。

帰家
帰家

え?はい??

kabu
kabu

そこには、
・支出のシート
・収入のシート
・固定費のシート
・貯蓄のシート
・収支をまとめたシート
と、色々なシートが、情報を流用しながら作成されているはずです。

kabu
kabu

Google広告でも同様に、色々なテーブルが、それぞれ情報を流用しながら存在しています。
・キャンペーンでまとめたテーブル
・広告グループでまとめたテーブル
・性別でまとめたテーブル
・年齢でまとめたテーブル
・全体の数値をまとめたテーブル
などですね。

kabu
kabu

なのでこの “テーブル” は、家計簿スプレッドシートの “シート” のことだと思ってもらえれば分かりやすいかと思います。
「FROM」句では、どのデータがまとまったテーブルを参照するかを指定しています。

帰家
帰家

あーなんとなく分かりました!
Google広告のデータは複数のテーブルにまとまっていて、「FROM」句でどれにするか選んでるってことですね!!

WHERE句

kabu
kabu

「WHERE」句は、フィルタのような機能を持っています。

SELECT segments.month, metrics.impressions FROM campaign WHERE metrics.impressions <> 0 ORDER BY segments.month DESC LIMIT 50
kabu
kabu

上のコードの場合だと、
WHERE metrics.impressions <> 0」
すなわち
「表示回数が 0 以外のデータに抜粋して
ということになります。

よく使う書き方説明
WHERE metrics.impressions <> 0表示回数が0以外
WHERE metrics.conversions >= 1コンバージョン数が1以上
WHERE segments.device = ‘mobile’デバイスがスマホ
WHERE segments.date DURING LAST_MONTH先月のデータ
WHERE segments.date BETWEEN ‘2025-01-01’ AND ‘2025-01-31’2025/1/1~20251/31までのデータ
帰家
帰家

「WHERE」句で、データを絞り込むわけですね!

ORDER BY 句

kabu
kabu

「ORDER BY」句はソートの役割を持っています。

SELECT segments.month, metrics.impressions FROM campaign WHERE metrics.impressions <> 0 ORDER BY segments.month DESC LIMIT 50
kabu
kabu

上のコードの場合だと、
ORDER BY segments.month DESC」
すなわち
「月で降順に並べて
という意味になります。

よく使う書き方説明
ORDER BY ad_group.name ASCデータを広告グループ名で “昇順” に並べ替える
ORDER BY metrics.impressions ASCデータを表示回数で “昇順” に並べ替える
ORDER BY segments.month DESCデータを月で “降順” に並び替える
ORDER BY campaign.name ASC, metrics.conversions DESCキャンペーン名を昇順で並び替えた後、CV数の降順に並び替える
帰家
帰家

なるほど!
・・・んん??最後のだけよく分からない!!

kabu
kabu

例を見てみましょう。
例えば、以下のようなテーブルがあるとします。

キャンペーン名広告グループ名CV数
キャンペーン東京グループA0
キャンペーン大阪グループB1
キャンペーン東京グループC2
キャンペーン大阪グループD3
kabu
kabu

これを以下内容の「ORDER BY」で並び替えます。
まずは 最初の並び替え 部分の動きをみてみます。

ORDER BY campaign.name ASC, metrics.conversions DESC
キャンペーン名広告グループ名CV数
キャンペーン大阪 ↑グループB1
キャンペーン大阪 ↑↑グループD3
キャンペーン東京グループA0
キャンペーン東京グループC2
kabu
kabu

するとキャンペーン名の昇順で並び替えられます。
ここまではいいですよね?

帰家
帰家

うん。
分かります!

kabu
kabu

続いて 後ろ側の並び替え の動きを見てみます。

ORDER BY campaign.name ASC, metrics.conversions DESC
キャンペーン名広告グループ名CV数
キャンペーン大阪グループD3 ↑
キャンペーン大阪グループB1
キャンペーン東京グループC2 ↑
キャンペーン東京グループA0
kabu
kabu

すると、キャンペーン名はソート済み(固定)なので、同キャンペーン内でCV数の降順に並び替えられます。
仕上がりは以下の形です。

キャンペーン名広告グループ名CV数
キャンペーン大阪グループD3
キャンペーン大阪グループB1
キャンペーン東京グループC2
キャンペーン東京グループA0
帰家
帰家

分かったような、分からないような笑
とにかく、最初の並び替えはベースとして動かず、次の並び替えは並び替えられた中で並び替えってことですね!

LIMIT 句

kabu
kabu

最後は「LIMIT」句ですね。
これは簡単です。

SELECT segments.month, metrics.impressions FROM campaign WHERE metrics.impressions <> 0 ORDER BY segments.month DESC LIMIT 50
帰家
帰家

・・・指定した件数のみ出力とか?

kabu
kabu

そうです。
「LIMIT」句の前の文までに処理されたデータを指定件数で抜粋する、といったところでしょうか。
上のコードの場合「50」件で抜粋(出力)ってことになります。

データが分かれてしまう!?よくある「FROM」句のトラブル

kabu
kabu

Google広告スクリプトでは、この「FROM」句が結構鬼門なようです。
「FROM」句の指定を間違えて、思ったようなデータを取れなかったりプログラムがエラー などが起きてしまいます。

帰家
帰家

そうなんですよ!!
ようやく一番最初につながった?!

思ったようなデータを取り出せない

思ったようなデータが取り出せない場合、「FROM」句で指定しているテーブルが間違っている可能性があります。

例えば、月ごとの表示回数を取得したいと思います。
次のコードで、「FROM」句に「campaign」を指定して出力します。

SELECT segments.month, metrics.impressions FROM campaign WHERE metrics.impressions <> 0 ORDER BY segments.month DESC

すると出力されるデータは以下のようになります。

表示回数
2025-02-011,432
2025-02-01989
2025-01-011,218
2025-01-01867
2024-12-011,331
2024-12-01770
・・・
帰家
帰家

そうそう!
こんな感じで、同じ日付なのにデータが分かれちゃうんですよ!

kabu
kabu

これは、「FROM」句で指定している「campaign」テーブルには、そもそも複数のcampaignがあるためだと思われます。

(隠れているキャンペーン)表示回数
キャンペーン東京2025-02-011,432
キャンペーン大阪2025-02-01989
キャンペーン東京2025-01-011,218
キャンペーン大阪2025-01-01867
キャンペーン東京2024-12-011,331
キャンペーン大阪2024-12-01770
・・・
kabu
kabu

隠れている「campaign」列を表示するとこんな感じですね。
「FROM」句でこのテーブルを選択した場合、あくまでこのテーブルの中から、取得(表示・出力)する列を「SELECT」句で選択しているに過ぎないんですね。

帰家
帰家

あ、そういうことなんですか!

kabu
kabu

なので、月でまとめたデータを取得したい場合は、「FROM」句には「customer」を指定するのが正しいです。

SELECT segments.month, metrics.impressions FROM customer WHERE metrics.impressions <> 0 ORDER BY segments.month DESC
表示回数
2025-02-012,421
2025-01-012,085
2024-12-012,101
・・・

そうすればこのようなデータを取得することができます。
ちなみに「customer」は、全体の「表示回数」から「クリック数」、「CV数」、「予算」などなど
総括したデータを取得したい場合に指定すると良いです。

Google広告スクリプトでは「GROUP BY」でまとめられない

kabu
kabu

ちょっと脱線しますが、Google広告スクリプトでは「GROUP BY」句は使えないようです。

表示回数
2025-02-011,432
2025-02-01989
2025-01-011,218
2025-01-01867
2024-12-011,331
2024-12-01770
・・・

これのデータをなんとか、同じ月は同じデータに統合させたいとします。
以下のように「GROUP BY」で指定してみましたが、Google広告スクリプト側でエラーが起きました。

SELECT segments.month, SUM(metrics.impressions) FROM campaign WHERE metrics.impressions <> 0 GROUP BY segments.month ORDER BY segments.month DESC
kabu
kabu

ま、考えてみれば当然ですよね。
隠れている(指定しなかった)列を表示させると下のようになるわけですから、いくら「GROUP BY」句を使おうが統合できようがありません。

(隠れているキャンペーン)表示回数
キャンペーン東京2025-02-011,432
キャンペーン大阪2025-02-01989
キャンペーン東京2025-01-011,218
キャンペーン大阪2025-01-01867
キャンペーン東京2024-12-011,331
キャンペーン大阪2024-12-01770
・・・

プログラムエラーが出る

kabu
kabu

プログラムエラーが出る原因は、テーブルに無い指標 を指定しているからだと考えられます。

帰家
帰家

テーブルに無い指標
ですか・・・?

キャンペーン表示回数
キャンペーン東京2025-02-011,432
キャンペーン大阪2025-02-01989
キャンペーン東京2025-01-011,218
キャンペーン大阪2025-01-01867
キャンペーン東京2024-12-011,331
キャンペーン大阪2024-12-01770
・・・・・・・・・
kabu
kabu

例えば、上のようなテーブルがあるとします。
このテーブルには「キャンペーン」、「月」、「表示回数」の指標があります。
しかし、「性別」を取得するよう指定した場合、当然このテーブルに無いのでエラーが返ってくる、ということです。

どのテーブルになんの指標が入っているのかはこちらから確認してみてください。

まとめ

kabu
kabu

・・・ごめんなさい。
簡単に説明するつもりが、結構しっかりと(Google広告スクリプトの)SQLを解説してしまいました。

帰家
帰家

・・・そうですね笑

今回は以下の内容で解説してもらいました。
○「FROM」句とは
– Google広告スクリプトで使用する、SQLの主な記載方法・構造
○データが分かれてしまう!?よくある「FROM」句のトラブル
– 思ったようなデータを取り出せない
– Google広告スクリプトでは「GROUP BY」でまとめられない
– プログラムエラーが出る

kabu
kabu

「FROM」句の説明のためにSQLの全体像を説明しました。

Google広告スクリプトでよく使うSQL文はこんな感じ。

SELECT segments.month, metrics.impressions FROM campaign WHERE metrics.impressions <> 0 ORDER BY segments.month DESC LIMIT 50
句の名前
FROMテーブル” を指定する機能があり、スプレッドシートで例えるなら、どの “シート” から参照するかの指示を記載する役割です。
SELECTテーブル内のどの “” を取得するか指定します。
WHEREフィルターのような役割で、取得するデータを制限したり精査する機能があります。
ORDER BY取得したデータのソート・並び替えをすることができます。
LIMIT表示・出力するデータ数(行数)を絞ることができます。
kabu
kabu

SQL自体には、もっと多くの句や書き方がありますが、
今回は、Google広告スクリプトでよく使う内容として紹介しました。

コメント

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