區隔在 Google Ads UI 中是獨立選單,只要在查詢中加入正確的欄位,即可在 Google Ads API 中導入。舉例來說,在查詢中加入 segments.device
後,系統會產生一份報表,其中每部裝置和 FROM
子句中的指定資源組合各一列,以及劃分的統計資料值 (曝光、點擊、轉換等)。
雖然在 Google Ads UI 中一次只能使用一個區隔,但透過 API,您可以在同一項查詢中指定多個區隔。
SELECT
campaign.name,
campaign.status,
segments.device,
metrics.impressions
FROM campaign
傳送這項查詢到 GoogleAdsService.SearchStream
的結果會如下所示:
{
"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"
}
},
...
]
}
請注意,在上述的範例結果中,包括資源名稱的第一個和第二個物件屬性是相同的。曝光次數是按 device 區隔,因此同一個廣告活動可能會傳回兩個以上的物件。
隱性區隔
每份報表一開始都是依 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"
}
}
]
}
請注意,系統一律會傳回 adGroup
的 resource_name
欄位,因為 ad_group
已指定為 FROM
子句中的資源。
可選取的區隔欄位
您在 FROM
子句中的特定資源無法選取部分區隔欄位。舉例來說,我們會繼續透過 ad_group
資源進行查詢。如要從 ad_group 資源中選取區隔欄位,這個欄位必須存在於 ad_group 的 Segments
清單中。Segments
清單是 ad_group
資源中繼資料頁面上可用欄位表格的黃色部分。
區隔資源
從某些資源選取時,您可以選擇在 FROM
子句中選取資源的欄位以及資源欄位,以隱含方式彙整相關資源。您可在 FROM
子句中繼資料頁面資源的 Attributed Resources
清單中找到這些相關資源。如果是 ad_group
資源,您也可以從 campaign
資源中選取欄位。只要 Attributed Resources
的 resource_name 欄位在 SELECT
子句中至少有 1 個欄位,系統將會自動傳回該欄位,即使查詢中未明確包含 resource_name 欄位也是如此。
與選取 Attributed Resource
欄位類似,您也可以選取 Segmenting Resource
欄位。如果指定資源的中繼資料頁面上有 Segmenting Resources
清單,則從上述所列的其中一個資源中選取欄位,會導致查詢進一步依該 Segmenting Resource
傳回的 resource_name 進行區隔。舉例來說,您會發現 campaign_budget
資源的 campaign
資源列為 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
子句,就會限制只剩可用區隔來選取這兩份清單的交集。
- 新增某些區隔後,摘要列中的指標可能會減少
- 在使用
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
函式,如下所示:
可以在
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 > '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 相簿」搜尋字詞會歸在同一日期 (2015 年 6 月 15 日) 的兩個廣告群組 (ID 2222222222
和 33333333333
)。
因此,我們可以推論出 API 運作正常,且在本例中不會傳回重複物件。