區隔

Google Ads 使用者介面提供區隔功能,可透過獨立選單存取。如要在 Google Ads API 中導入區隔,請在查詢中加入適當的欄位。例如,假設您在查詢中加入 segments.device。報表中的每一列會顯示裝置和 FROM 子句中指定資源的組合,以及各組合的統計值 (曝光、點擊、轉換等)。

在 Google Ads UI 中,一次只能使用一個區隔,但透過 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 子句中指定的資源進行區隔。系統會傳回 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"
      }
    }
  ]
}

系統一律會傳回 adGroup 的 resource_name 欄位,因為 ad_group 在 FROM 子句中指定為資源。

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"
      }
    }
  ]
}

雖然本例中傳回的兩個物件看似重複,但資源名稱其實不同,尤其是廣告群組 ID 部分。這表示搜尋字詞 "google photos" 在同一日期 (2024-06-15) 歸因於兩個廣告群組 (ID 2222222222 和 33333333333)。因此,API 運作正常,在這種情況下不會傳回重複的物件。

可選取的區隔欄位

在 FROM 子句中,並非所有區隔欄位都能選取。舉例來說,假設您繼續從 ad_group 資源查詢。如要從 ad_group 資源中選取區隔欄位,該欄位必須存在於 ad_group 的 Segments 清單中。Segments 清單是 ad_group 資源中繼資料頁面上可用欄位表格的黃色部分。

區隔資源

從某些資源中選取時,您可以選取相關資源的欄位,以及 FROM 子句中資源的欄位,隱含地彙整相關資源。您可以在 FROM 子句的中繼資料頁面,從資源的 Attributed Resources 清單中找到這些相關資源。如果是 ad_group 資源,您也可以從 campaign 資源中選取欄位。即使查詢未明確包含 resource_name 欄位,系統也會自動傳回 SELECT 子句中至少有一個欄位的任何 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 清單是相容區隔的小型組合。也就是說,如果您在 SELECT 子句中加入 segments.hotel_check_in_date 欄位,則可選取的區隔會受限於這兩個清單的交集。

聯合區隔限制

部分區隔欄位有明確的選取限制,必須與 SELECT 子句中的父項區隔一併要求:

依所選區隔隱含篩選

在查詢中選取特定區隔欄位時,Google Ads API 可能會隱含篩選結果,只納入該區隔適用且有值的資料列。

segments.keyword.*的影響

選取 segments.keyword 下方的任何欄位 (例如 segments.keyword.info.text 和 segments.keyword.ad_group_criterion) 時,就會發生這種行為,這是常見且重要的例子:

  • 排除非關鍵字流量:如果您在 SELECT 子句中加入任何 segments.keyword.* 欄位,結果將僅限於與搜尋聯播網關鍵字廣告群組條件直接相關的資料列。
  • 受影響的廣告活動類型:因此,不依賴搜尋關鍵字的廣告活動類型或廣告群組資料,會從結果中排除。包括但不限於:
    • 動態搜尋廣告:動態搜尋廣告目標是根據網站內容 (而非關鍵字) 決定。
    • 購物廣告活動:使用產品群組,而非關鍵字。
    • 最高成效廣告活動:雖然最高成效廣告活動可能會在搜尋聯播網上放送,但報表通常不會按相同的關鍵字條件劃分。
  • 多媒體廣告聯播網:segments.keyword.* 欄位與搜尋聯播網使用的關鍵字有關。不會依多媒體廣告聯播網關鍵字或其他多媒體指定方式區隔。

WHERE 子句中區隔的規則

如果區隔位於 WHERE 子句中,則也必須位於 SELECT 子句中。 但下列日期區隔 (稱為基本日期區隔) 不在此限:

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

基本日期區隔欄位的規則

segments.date、segments.week、segments.month、segments.quarter 和 segments.year 區隔的功能如下:

  • 這些區隔可在 WHERE 子句中篩選,不會出現在 SELECT 子句中。
  • 如果 SELECT 子句中包含上述任一區隔,則必須在 WHERE 子句中指定由基本日期區隔組成的有限日期範圍。日期區隔不一定要與 SELECT 中指定的區隔相同。

範例

無效:由於 segments.date 位於 SELECT 子句中,因此您必須在 WHERE 子句中為 segments.date、segments.week、segments.month、segments.quarter 或 segments.year 指定有限的日期範圍。
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