分割表示は、Google 広告管理画面で別のメニューとして利用できます。Google Ads API でセグメンテーションを実装するには、クエリに適切なフィールドを追加します。たとえば、クエリに segments.device を追加するとします。これにより、FROM 句で指定されたデバイスとリソースの組み合わせごとに 1 行のレポートが生成され、統計値(インプレッション数、クリック数、コンバージョン数など)がそれらの間で分割されます。
Google 広告の UI では一度に 1 つのセグメントしか使用できませんが、API では同じクエリで複数のセグメントを指定できます。
SELECT
campaign.name,
campaign.status,
segments.device,
metrics.impressions
FROM campaign
このクエリを GoogleAdsService.SearchStream に送信した結果は、次の JSON 文字列のようになります。
{
"results":[
{
"campaign":{
"resourceName":"customers/1234567890/campaigns/111111111",
"name":"Test campaign",
"status":"ENABLED"
},
"metrics":{
"impressions":"10922"
},
"segments":{
"device":"MOBILE"
}
},
{
"campaign":{
"resourceName":"customers/1234567890/campaigns/111111111",
"name":"Test campaign",
"status":"ENABLED"
},
"metrics":{
"impressions":"28297"
},
"segments":{
"device":"DESKTOP"
}
}
]
}
このサンプル結果では、リソース名を含む最初と 2 番目のオブジェクトの属性は同じです。インプレッションはデバイスごとにセグメント化されるため、同じキャンペーンに対して 2 つ以上のオブジェクトが返されることがあります。
暗黙的セグメント分割
すべてのレポートは、最初に FROM 句で指定されたリソースでセグメント化されます。resource_name フィールドがクエリに明示的に含まれていない場合でも、FROM 句のリソースの resource_name フィールドが返され、指標がそのフィールドでセグメント化されます。たとえば、FROM 句のリソースとして ad_group を指定すると、ad_group.resource_name が自動的に返され、指標は ad_group レベルで暗黙的にセグメント化されます。
このクエリの場合:
SELECT metrics.impressions
FROM ad_group
次のような JSON 文字列が返されます。
{
"results":[
{
"adGroup":{
"resourceName":"customers/1234567890/adGroups/2222222222"
},
"metrics":{
"impressions":"237"
}
},
{
"adGroup":{
"resourceName":"customers/1234567890/adGroups/33333333333"
},
"metrics":{
"impressions":"15"
}
},
{
"adGroup":{
"resourceName":"customers/1234567890/adGroups/44444444444"
},
"metrics":{
"impressions":"0"
}
}
]
}
ad_group が FROM 句でリソースとして指定されているため、adGroup の resource_name フィールドは常に返されます。
search_term_view
search_term_view リソースは、検索語句だけでなく広告グループによっても暗黙的にセグメント化されます。これは、広告グループも含まれるリソース名の構造に反映されています。そのため、同じ検索語句が結果に表示される重複した行が、異なる広告グループに属している場合、次のように表示されることがあります。
{
"results":[
{
"searchTermView":{
"resourceName":"customers/1234567890/searchTermViews/111111111~2222222222~Z29vZ2xlIHBob3RvcyBpb3M",
"searchTerm":"google photos"
},
"metrics":{
"impressions":"3"
},
"segments":{
"date":"2024-06-15"
}
},
{
"searchTermView":{
"resourceName":"customers/1234567890/searchTermViews/111111111~33333333333~Z29vZ2xlIHBob3RvcyBpb3M",
"searchTerm":"google photos"
},
"metrics":{
"impressions":"2"
},
"segments":{
"date":"2024-06-15"
}
}
]
}
この例では、返された 2 つのオブジェクトが重複しているように見えますが、実際にはリソース名が異なります。特に広告グループ ID の部分が異なります。これは、検索語句 "google photos" が同じ日付(2024-06-15)に 2 つの広告グループ(ID 2222222222 と 33333333333)に割り当てられていることを意味します。したがって、このケースでは API は意図したとおりに動作し、重複するオブジェクトは返されませんでした。
選択可能なセグメント フィールド
FROM 句では、特定のリソースに対してすべてのセグメント フィールドを選択できるわけではありません。たとえば、ad_group リソースからクエリを続行するとします。ad_group リソースからセグメント フィールドを選択できるようにするには、そのフィールドが ad_group の Segments リストに存在する必要があります。Segments リストは、ad_group リソースのメタデータ ページの [使用可能なフィールド] テーブルの黄色い部分です。
セグメント リソース
一部のリソースを選択する際に、FROM 句でリソースのフィールドとともに関連リソースのフィールドを選択することで、関連リソースを暗黙的に結合するオプションが提供されることがあります。これらの関連リソースは、FROM 句のリソースのメタデータ ページの Attributed Resources リストにあります。ad_group リソースの場合、campaign リソースからフィールドを選択することもできます。SELECT 句に少なくとも 1 つのフィールドがある Attributed Resources の resource_name フィールドは、クエリに明示的に含まれていない場合でも自動的に返されます。resource_name
Attributed Resource フィールドの選択と同様に、Segmenting Resource フィールドを選択することもできます。特定のリソースのメタデータ ページに Segmenting Resources リストがある場合、リストされているリソースのいずれかからフィールドを選択すると、その Segmenting Resource の返された resource_name によってクエリがさらにセグメント化されます。たとえば、campaign リソースは、campaign_budget リソースの Segmenting
Resource としてリストされます。campaign_budget リソースから campaign.name などのキャンペーン フィールドを選択すると、campaign.name フィールドが返されるだけでなく、campaign.resource_name フィールドが返され、セグメント化されます。
セグメントと指標の選択可能性
特定のセグメント フィールドは、他のセグメント フィールドや指標フィールドと互換性がない場合があります。どのセグメント フィールドが相互に互換性があるかを確認するには、SELECT 句のセグメントの selectable_with リストを確認します。
ad_group リソースの場合、50 以上のセグメントを選択できます。ただし、segments.hotel_check_in_date の selectable_with リストは、互換性のあるセグメントのセットがはるかに小さくなります。つまり、segments.hotel_check_in_date フィールドを SELECT 句に追加すると、選択可能な残りのセグメントは、これら 2 つのリストの共通部分に制限されます。
結合セグメントの制約
一部のセグメント フィールドには、SELECT 句で親セグメントとともにリクエストする必要がある明示的な選択制約があります。
segments.ad_sub_network_type(YouTube 広告のサブネットワーク(インストリーム、インフィード、ショートなど)を分類)を選択する場合は、segments.ad_network_typeも選択する必要があります。- v25 以降では、
segments.ad_sub_format_type(YouTube インストリーム スキップ不可広告を再生時間別に分類)を選択する場合は、segments.ad_format_typeも選択する必要があります。
セグメント選択による暗黙的なフィルタリング
クエリで特定のセグメント フィールドを選択すると、Google Ads API は、そのセグメントが適用可能で値を持つ行のみを含むように結果を暗黙的にフィルタする場合があります。
segments.keyword.* の影響
この動作の一般的な重要な例は、segments.keyword の下のフィールド(segments.keyword.info.text や segments.keyword.ad_group_criterion など)を選択する場合です。
- キーワード以外のトラフィックの除外:
SELECT句にsegments.keyword.*フィールドを含めると、検索ネットワークのキーワード広告グループ条件に直接関連付けられている行のみに結果が制限されます。 - 影響を受けるキャンペーン タイプ: 検索キーワードに依存しないキャンペーン タイプや広告グループのデータは、結果から除外されます。これには次の内容が含まれますが、この限りではありません。
- 動的検索広告(DSA): DSA のターゲットはキーワードではなくウェブサイトのコンテンツに基づいているため。
- ショッピング キャンペーン: キーワードではなく商品グループを使用します。
- P-MAX キャンペーン: P-MAX は検索に配信されることがありますが、通常、レポートは同じキーワード条件で分類されません。
- ディスプレイ ネットワーク:
segments.keyword.*フィールドは、検索ネットワークで使用されるキーワードに関連しています。ディスプレイ ネットワークのキーワードやその他のディスプレイ ターゲティング方法でセグメント化されません。
WHERE 句のセグメントのルール
セグメントが WHERE 句にある場合は、SELECT 句にも存在する必要があります。このルールの例外は、次の日付セグメントです。これらはコア日付セグメントと呼ばれます。
segments.datesegments.weeksegments.monthsegments.quartersegments.year
コア データ セグメント フィールドのルール
セグメント segments.date、segments.week、segments.month、segments.quarter、segments.year は次のように機能します。
- これらのセグメントは、
SELECT句に表示されなくてもWHERE句でフィルタできます。 - これらのセグメントのいずれかが
SELECT句にある場合は、WHERE句でコア日付セグメントで構成される有限の期間を指定する必要があります。日付セグメントは、SELECTで指定されたものと同じである必要はありません。
例
無効: segments.date が SELECT 句にあるため、segments.date、segments.week、segments.month、segments.quarter、segments.year の WHERE 句で有限の日付範囲を指定する必要があります。 |
SELECT campaign.name, metrics.clicks, segments.date FROM campaign |
有効: このクエリは、指定された期間内に発生したキャンペーン名とクリック数を返します。segments.date は SELECT 句に表示する必要はありません。 |
SELECT campaign.name, metrics.clicks FROM campaign WHERE segments.date >= '2024-01-01' AND segments.date <= '2024-01-31' |
| 有効: このクエリは、指定された期間内のすべての日について、キャンペーン名とクリック数を日付別に返します。 |
SELECT campaign.name, metrics.clicks, segments.date FROM campaign WHERE segments.date >= '2024-01-01' AND segments.date <= '2024-01-31' |
| 有効: このクエリは、指定された期間内のすべての日について、キャンペーン名とクリック数を月ごとに分割して返します。 |
SELECT campaign.name, metrics.clicks, segments.month FROM campaign WHERE segments.date >= '2024-01-01' AND segments.date <= '2024-01-31' |
| 有効: このクエリは、指定された年範囲内のすべての月について、四半期別、月別に分類されたキャンペーン名とクリック数を返します。 |
SELECT campaign.name, metrics.clicks, segments.quarter, segments.month FROM campaign WHERE segments.year >= 2020 AND segments.year <= 2024 |