세분화

세분화는 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 필드가 반환되고 측정항목이 이 필드별로 세분화됩니다. 예를 들어 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.name과 같은 캠페인 필드를 campaign_budget 리소스에서 선택하면 campaign.name 필드가 반환될 뿐만 아니라 campaign.resource_name 필드 가 반환되고 세분화됩니다.

세그먼트와 측정항목 간의 선택 가능성

지정된 세그먼트 필드는 다른 세그먼트 필드 또는 측정항목 필드와 호환되지 않을 수 있습니다. 호환되는 세그먼트 필드를 확인하려면 SELECT 절에 있는 세그먼트의 selectable_with 목록을 검토하세요.

ad_group 리소스의 경우 선택할 수 있는 세그먼트가 50개 이상 있습니다. 그러나 selectable_with 목록은 segments.hotel_check_in_date 호환되는 세그먼트의 훨씬 작은 집합입니다. 즉, segments.hotel_check_in_date 필드를 SELECT 절에 추가하면 선택할 수 있는 세그먼트가 이 두 목록의 교집합으로 제한됩니다.

공동 세그먼트 제약 조건

일부 세그먼트 필드에는 다른 필드와 함께 요청해야 하는 명시적 선택 제약 조건이 있습니다. 예를 들어 segments.ad_sub_format_type (YouTube 인스트림 건너뛸 수 없는 광고를 기간별로 분류)은 항상 segments.ad_format_type과 함께 동일한 쿼리에서 선택해야 합니다.

세그먼트 선택에 의한 암시적 필터링

쿼리에서 특정 세그먼트 필드를 선택하면 Google Ads API에서 해당 세그먼트가 적용되고 값이 있는 행만 포함하도록 결과를 암시적으로 필터링할 수 있습니다.

segments.keyword.*의 영향

이 동작의 일반적이고 중요한 예는 segments.keyword 아래의 필드를 선택할 때 발생합니다 (예: segments.keyword.info.textsegments.keyword.ad_group_criterion).

  • 키워드 이외의 트래픽 제외: SELECT 절에 segments.keyword.* 필드를 포함하면 결과가 검색 네트워크 키워드 광고그룹 기준과 직접 연결된 행으로만 제한됩니다.
  • 영향을 받는 캠페인 유형: 따라서 검색 키워드에 의존하지 않는 캠페인 유형 또는 광고그룹의 데이터는 결과에서 제외 됩니다. 여기에는 다음 기능이 포함되지만 이에 국한되지는 않습니다.

    • 동적 검색 광고 (DSA): DSA 타겟은 키워드가 아닌 웹사이트 콘텐츠를 기반으로 하기 때문입니다.
    • 쇼핑 캠페인: 키워드 대신 제품 그룹을 사용합니다.
    • 실적 최대화 캠페인: 실적 최대화 캠페인이 검색에 게재될 수 있지만 일반적으로 동일한 키워드 기준에 따라 보고서가 세분화되지는 않습니다.
  • 디스플레이 네트워크: segments.keyword.* 필드는 검색 네트워크 에서 사용되는 키워드와 관련이 있습니다. 디스플레이 네트워크 키워드 또는 기타 디스플레이 타겟팅 방법으로 세분화하지 않습니다.

권장사항: 분석에 DSA, 쇼핑 또는 검색 키워드 기반이 아닌 다른 소스의 실적 데이터를 포함해야 하는 경우 쿼리에 segments.keyword.*의 필드를 포함하지 마세요. 먼저 모든 캠페인 유형의 데이터를 분석하고 검색 키워드 실적에 집중할 때만 키워드 세분화를 적용하세요.

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 절에 있으므로 segments.date, segments.week, segments.month, segments.quarter, 또는 segments.yearWHERE 절에 유한 날짜 범위를 지정해야 합니다.
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-06-15)에 두 광고그룹 (ID 222222222233333333333)에 기여합니다. 따라서 API가 의도한 대로 작동했으며 이 경우 중복된 객체를 반환하지 않았다고 결론 내릴 수 있습니다.