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
로 전송한 결과는 다음 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 필드가 쿼리에 명시적으로 포함되지 않은 경우에도 마찬가지입니다. 예를 들어 ad_group
를 FROM
절의 리소스로 지정하면 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_group
가 FROM
절에서 리소스로 지정되었으므로 adGroup
의 resource_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_date
의 selectable_with
목록은 호환되는 세그먼트 수가 훨씬 적습니다. 즉, segments.hotel_check_in_date
필드를 SELECT
절에 추가하면 선택할 수 있는 세그먼트를 이 두 목록의 교집합으로 제한합니다.
- 일부 세그먼트를 추가하면 요약 행의 측정항목이 감소할 수 있습니다.
segments.keyword.info.match_type
가FROM ad_group_ad
가 있는 쿼리에 추가되면 해당 세그먼트는 키워드가 있는 데이터 행만 가져오고 키워드와 연결되지 않은 행을 삭제하도록 쿼리에 지시합니다. 이 경우 키워드 이외의 측정항목은 모두 제외되므로 측정항목이 낮아집니다.
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"
}
}
]
}
이 예에서 반환된 두 객체가 중복되는 것처럼 보이지만 실제로는 '광고그룹' 부분에서 리소스 이름이 다릅니다. 즉, 검색어 'Google 포토'는 같은 날짜 (2015년 6월 15일)에
두 개의 광고그룹 (ID 2222222222
및 33333333333
)에 속합니다.
따라서 이 경우 API가 의도대로 작동했고 중복 객체를 반환하지 않았다고 결론을 내릴 수 있습니다.