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"
}
},
...
]
}
위의 샘플 결과에서 리소스 이름을 포함한 첫 번째 및 두 번째 객체의 속성은 동일합니다. 노출수는 기기별로 분류되므로 동일한 캠페인에 대해 2개 이상의 객체가 반환될 수 있습니다.
암시적 세분화
모든 보고서는 처음에는 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"
}
}
]
}
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가 의도한 대로 작동했으며 이 경우 중복 객체를 반환하지 않았다고 결론을 내릴 수 있습니다.