セグメンテーション

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

セグメンテーションは、Google Ads UI で個別のメニューとして利用できますが、クエリに適切なフィールドを追加するだけで Google Ads API で実装できます。たとえば、segments.device をクエリに追加すると、FROM内のデバイスとリソースの組み合わせごとに行が作成され、それらの間で統計値(インプレッション数、クリック数、コンバージョン数など)が分割されます。

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 番目のオブジェクトの属性は同じです。表示回数はデバイス別に分割されるため、同じキャンペーンに対して複数のオブジェクトを返すことができます。

暗黙的セグメント分割

すべてのレポートは、最初に 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_groupFROM 句でリソースとして指定されているため、adGroupresource_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_dateselectable_with リストは、互換性のあるセグメントのセットがはるかに少なくなっています。つまり、SELECT 句に segments.hotel_check_in_date フィールドを追加すると、選択可能な残りのセグメントは、この 2 つのリストの共通部分に限定されます。

セグメントをいくつか追加すると、概要行の指標が低下することがあります
FROM ad_group_ad でクエリに segments.keyword.info.match_type が追加されると、このセグメントはキーワードを含むデータの行のみを取得し、キーワードに関連付けられていない行を削除するようクエリに指示します。この場合、キーワード以外の指標がすべて除外されるため、指標が小さくなります。

WHERE 句のセグメントのルール

セグメントが WHERE 句にある場合は、SELECT 句にも含まれている必要があります。ただし、以下の日付セグメントは例外として、日付コアセグメントと呼ばれます。

  • segments.date
  • segments.week
  • segments.month
  • segments.quarter
  • segments.year

コア日付セグメント フィールドのルール

セグメント segments.datesegments.weeksegments.monthsegments.quartersegments.year は次のように機能します。

  • これらのセグメントは、SELECT 句に含めずに WHERE 句でフィルタできます。

  • これらのセグメントのいずれかが SELECT 句に含まれている場合、コアの期間で構成される有限の期間を WHERE 句に指定する必要があります(日付セグメントは SELECT 内で指定するものと同じである必要はありません)。

無効: segments.dateSELECT 句に含まれているため、segments.datesegments.weeksegments.monthsegments.quartersegments.yearWHERE 句で、有限期間を指定する必要があります。
SELECT
  campaign.name,
  metrics.clicks,
  segments.date
FROM campaign
有効: このクエリは、期間中に発生したキャンペーン名とクリック数を返します。segments.dateSELECT 句に含める必要はありません。
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 リソースについては、リソース名の構造(広告グループも含む)に反映されているように、検索キーワードだけでなく、広告グループによっても暗黙的にセグメント化されます。したがって、実際には、同じ検索語句を含む行が重複してあり、行が別の広告グループに属していることがわかります。

{
  "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 photos」は、同じ日付(2015 年 6 月 15 日)の 2 つの広告グループ(ID 222222222233333333333)に関連付けられます。したがって、API は想定どおりに動作し、この場合は重複するオブジェクトを返しなかったと結論付けられます。