세분화

세분화는 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이 자동으로 반환되고 측정항목이 광고 그룹 수준에서 암시적으로 분류됩니다.

따라서 이 쿼리의 경우

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 Resourcesresource_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 목록은 호환되는 훨씬 작은 세트의 세그먼트입니다. 즉, SELECT 절에 segments.hotel_check_in_date 필드를 추가하면 선택할 수 있는 세그먼트가 이 두 목록의 교집합으로 제한됩니다.

특정 세그먼트를 추가하면 요약 행의 측정항목이 감소할 수 있습니다. 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 > '2024-01-01'
  AND segments.date < '2024-02-01'
유효: 이 쿼리는 날짜 범위의 모든 날짜에 대해 캠페인 이름과 클릭수를 날짜별로 분류하여 반환합니다.
SELECT
  campaign.name,
  metrics.clicks,
  segments.date
FROM campaign
WHERE segments.date > '2024-01-01'
  AND segments.date < '2024-02-01'
유효: 이 쿼리는 기간 내 모든 날짜의 캠페인 이름과 클릭수를 월별로 분류하여 반환합니다.
SELECT
  campaign.name,
  metrics.clicks,
  segments.month
FROM campaign
WHERE segments.date > '2024-01-01'
  AND segments.date < '2024-02-01'
유효: 이 쿼리는 연도 범위의 모든 월에 대해 분기별, 월별로 분류된 캠페인 이름과 클릭수를 반환합니다.
SELECT
  campaign.name,
  metrics.clicks,
  segments.quarter,
  segments.month
FROM campaign
WHERE segments.year > 2019
  AND segments.year < 2024

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

이 예에서 반환된 두 객체는 중복된 것처럼 보이지만 리소스 이름은 실제로 다릅니다. 특히 '광고 그룹' 부분이 다릅니다. 즉, 검색어 'google photos'가 동일한 날짜 (2024년 6월 15일)에 두 광고 그룹 (ID 222222222233333333333)에 기여한 것으로 간주됩니다. 따라서 API가 의도한 대로 작동했으며 이 경우 중복 객체를 반환하지 않았다고 결론 내릴 수 있습니다.