세분화

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 절에 지정된 리소스에 따라 분류됩니다. 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"
      }
    }
  ]
}

ad_groupFROM 절에서 리소스로 지정되었으므로 adGroupresource_name 필드는 항상 반환됩니다.

선택 가능한 세그먼트 필드

FROM 절의 특정 리소스에 대해 선택할 수 있는 세그먼트 필드는 일부입니다. 예를 들어 ad_group 리소스에서 계속 쿼리합니다. ad_group 리소스에서 세그먼트 필드를 선택할 수 있으려면 해당 필드가 ad_group의 Segments 목록에 있어야 합니다. Segments 목록은 ad_group 리소스의 메타데이터 페이지에 있는 사용 가능한 필드 표의 노란색 부분입니다.

세그먼트 리소스

일부 리소스 중에서 선택할 때 FROM 절에서 리소스의 필드와 함께 관련 리소스의 필드를 선택하여 관련 리소스를 암시적으로 조인할 수 있습니다. 이러한 관련 리소스는 FROM 절의 메타데이터 페이지에 있는 리소스의 Attributed Resources 목록에서 확인할 수 있습니다. ad_group 리소스의 경우 campaign 리소스에서 필드를 선택할 수도 있습니다. SELECT 절에 필드가 하나 이상 있는 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 절에 추가하면 선택할 수 있는 세그먼트가 두 목록의 교집합으로 제한됩니다.

일부 세그먼트를 추가하면 요약 행의 측정항목이 감소할 수 있음
segments.keyword.info.match_typeFROM 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.dateSELECT 절에 있으므로 WHERE 절에서 segments.date, segments.week, segments.month, segments.quarter 또는 segments.year에 대해 유한한 기간을 지정해야 합니다.
SELECT
  campaign.name,
  metrics.clicks,
  segments.date
FROM campaign
유효: 이 쿼리는 기간 동안 발생한 캠페인 이름과 클릭수를 반환합니다. segments.dateSELECT 절에 표시될 필요가 없습니다.
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-06-15)에 두 광고 그룹 (ID 222222222233333333333)에 기여했습니다. 따라서 이 경우 API가 의도한 대로 작동했으며 중복 객체를 반환하지 않은 것으로 결론을 내릴 수 있습니다.