分割は Google 広告の管理画面で個別のメニューとして利用できますが、適切なフィールドをクエリに追加するだけで、Google Ads API で実装できます。たとえば、クエリに segments.device
を追加すると、デバイスと FROM
句で指定されたリソースの組み合わせごとに行が作成され、統計値(インプレッション数、クリック数、コンバージョン数など)が行ごとに分割されます。
Google 広告の管理画面では一度に 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"
}
},
...
]
}
上記のサンプル結果では、リソース名を含む 1 番目のオブジェクトと 2 番目のオブジェクトの属性は同じです。インプレッションはデバイス別に分割されるため、同じキャンペーンで 2 つ以上のオブジェクトが返される場合があります。
暗黙的セグメント分割
すべてのレポートは、最初は FROM
句で指定されたリソースでセグメント化されます。FROM
句のリソースの resource_name フィールドが返され、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"
}
}
]
}
FROM
句で ad_group
がリソースとして指定されているため、adGroup
の resource_name
フィールドは常に返されます。
選択可能なセグメント フィールド
FROM
句の特定のリソースに対して、すべてのセグメント フィールドを選択できるわけではありません。ここでは、引き続き ad_group
リソースからクエリを実行します。セグメント フィールドを ad_group リソースから選択できるようにするには、そのフィールドが ad_group の Segments
リストに存在している必要があります。Segments
リストは、ad_group
リソースのメタデータ ページの使用可能なフィールドの表の黄色の部分です。
セグメントに関するリソース
一部のリソースから選択すると、FROM
句でリソースのフィールドとともにそれらのフィールドを選択することで、関連リソースを暗黙的に結合できる場合があります。これらの関連リソースは、FROM
句のメタデータ ページのリソースの Attributed Resources
リストで確認できます。ad_group
リソースの場合、campaign
リソースからフィールドを選択することもできます。resource_name フィールドがクエリに明示的に含まれていない場合でも、SELECT
句に少なくとも 1 つのフィールドがある Attributed Resources
の 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 つのリストの共通部分に制限されます。
- 一部のセグメントを追加すると、概要行の指標が減少することがある
FROM ad_group_ad
でクエリにsegments.keyword.info.match_type
が追加されると、そのセグメントは、キーワードを含むデータの行のみを取得し、キーワードに関連付けられていない行をすべて削除するようにクエリに指示します。この場合、キーワード以外の指標が除外されるため、指標は低くなります。
WHERE 句のセグメントのルール
セグメントが WHERE
句にある場合は、SELECT
句にも存在する必要があります。このルールの例外となる次の日付セグメントはコア日付セグメントと呼ばれます。
segments.date
segments.week
segments.month
segments.quarter
segments.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 > '2020-01-01' AND segments.date < '2020-02-01' |
有効: このクエリは、期間内のすべての日について、キャンペーン名とクリック数を日付別に返します。 |
SELECT campaign.name, metrics.clicks, segments.date FROM campaign WHERE segments.date > '2020-01-01' AND segments.date < '2020-02-01' |
有効: このクエリは、期間内のすべての日について、キャンペーン名とクリック数を月別に返します。 |
SELECT campaign.name, metrics.clicks, segments.month FROM campaign WHERE segments.date > '2020-01-01' AND segments.date < '2020-02-01' |
有効: このクエリは、指定した期間のすべての月について、四半期ごとに分割されたキャンペーン名とクリック数を返します。 |
SELECT campaign.name, metrics.clicks, segments.quarter, segments.month FROM campaign WHERE segments.year > 2015 AND segments.year < 2020 |
search_term_view
なお、search_term_view
リソースの場合、リソース名の構造にも反映されているように、検索キーワードだけでなく広告グループでも暗黙的にセグメント化されます。リソース名には広告グループも含まれます。そのため、同じ検索語句を含む重複する行が結果に表示されることがあります。しかし、実際には、これらの行は別の広告グループに属しています。
{
"results":[
{
"searchTermView":{
"resourceName":"customers/1234567890/searchTermViews/111111111~2222222222~Z29vZ2xlIHBob3RvcyBpb3M",
"searchTerm":"google photos"
},
"metrics":{
"impressions":"3"
},
"segments":{
"date":"2015-06-15"
}
},
{
"searchTermView":{
"resourceName":"customers/1234567890/searchTermViews/111111111~33333333333~Z29vZ2xlIHBob3RvcyBpb3M",
"searchTerm":"google photos"
},
"metrics":{
"impressions":"2"
},
"segments":{
"date":"2015-06-15"
}
}
]
}
この例で返される 2 つのオブジェクトは重複しているように見えますが、実際にはリソース名(特に「広告グループ」の部分)は異なります。つまり、「google フォト」という検索語句は、同じ日付(2015-06-15)の 2 つの広告グループ(ID 2222222222
と 33333333333
)に関連付けられていることを意味します。したがって、このケースでは API が想定どおりに動作し、重複するオブジェクトを返さなかったと結論付けることができます。