分割

细分是 Google Ads 界面中的一个单独菜单,只需在 Google Ads API 中向查询添加适当的字段,就可以实现此功能。例如,如果向查询添加 segments.device,则会生成一份报告,其中:每个设备和 FROM 子句中指定的资源组合都会各占一行,而且还会根据两者之间的统计值(展示次数、点击次数、转化次数等)进行划分。

虽然在 Google Ads 界面中一次只能使用一个细分,但使用 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"
      }
    },
    ...
  ]
}

请注意,在上面的示例结果中,第一个和第二个对象的属性(包括资源名称)是相同的。展示按设备细分,因此可针对同一个广告系列返回两个或更多对象。

隐式细分

每份报告最初都按 FROM 子句中指定的资源进行细分。即使查询中未明确包含 resource_name 字段,也会返回 FROM 子句中资源的 resource_name 字段并按它细分指标。例如,如果您在 FROM 子句中将 ad_group 指定为资源,则系统会自动返回 ad_group.resource_name,并在广告组级别根据该资源隐式细分指标。

对于这个查询

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 资源中选择字段。系统会自动返回 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_dateselectable_with 列表包含的兼容细分要少得多。这意味着,如果您将 segments.hotel_check_in_date 字段添加到 SELECT 子句中,则剩余的可用细分将限制为这两个列表的交集。

添加某些细分后,摘要行中的指标可能会减少
使用 FROM ad_group_adsegments.keyword.info.match_type 添加到查询后,该细分会指示查询仅获取包含关键字的数据行,并移除与关键字无关的所有行。在这种情况下,指标值会比较低,因为它会排除所有非关键字指标。

WHERE 子句中细分的规则

当某个片段位于 WHERE 子句中时,也必须位于 SELECT 子句中。以下日期细分是此规则的例外情况,我们将其称为核心日期细分

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

核心日期细分字段的规则

segments.datesegments.weeksegments.monthsegments.quartersegments.year 段的作用如下:

  • 这些片段可以在 WHERE 子句中过滤,而不会显示在 SELECT 子句中。

  • 如果这些细分中的任何一个在 SELECT 子句中,则必须在 WHERE 子句中指定由核心日期细分组成的有限日期范围(日期细分不必与 SELECT 中指定的日期细分相同)。

示例

无效:由于 segments.date 位于 SELECT 子句中,因此您需要在 WHERE 子句中为 segments.datesegments.weeksegments.monthsegments.quartersegments.year 指定有限日期范围。
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"
      }
    }
  ]
}

虽然此示例中返回的两个对象似乎是重复的,但它们的资源名称实际上是不同的,尤其是“广告组”部分。这意味着,搜索字词“google photos”在同一日期(2015 年 6 月 15 日)归因于两个广告组(ID 为 222222222233333333333)。因此,我们可以得出结论,在本例中,该 API 按预期运行,并且未返回重复的对象。