Podział na segmenty

Segmentację, która jest dostępna w interfejsie Google Ads jako osobne menu, można zaimplementować w interfejsie Google Ads API, dodając odpowiednie pole do zapytania. Jeśli na przykład dodasz do zapytania parametr segments.device, w raporcie pojawi się wiersz dla każdej kombinacji urządzenia i zasobu określonego w klauzuli FROM, a wartości statystyczne (wyświetlenia, kliknięcia, konwersje itp.) zostaną podzielone między te wiersze.

W interfejsie Google Ads można użyć tylko 1 segmentu naraz, ale w interfejsie API możesz określić w tym samym zapytaniu kilka segmentów.

SELECT
  campaign.name,
  campaign.status,
  segments.device,
  metrics.impressions
FROM campaign

Wyniki przesłania tego zapytania do GoogleAdsService.SearchStream będą wyglądać mniej więcej tak:

{
  "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"
      }
    },
    ...
  ]
}

Zwróć uwagę, że w powyższym przykładowym wyniku atrybuty pierwszego i drugiego obiektu, w tym nazwa zasobu, są takie same. Wyświetlenia są dzielone na segmenty według urządzenia, więc w przypadku tej samej kampanii mogą zostać zwrócone co najmniej 2 obiekty.

Podział na segmenty w sposób domyślny

Każdy raport jest początkowo dzielony na segmenty według zasobu określonego w klauzuli FROM. W zapytaniu z klauzulą FROM zwracane jest pole resource_name zasobu, a dane są dzielone na segmenty na jego podstawie, nawet jeśli pole to nie jest wyraźnie uwzględnione w zapytaniu. Jeśli np. w klauzuli FROM jako zasób podasz ad_group, automatycznie zwrócony zostanie parametr ad_group.resource_name, a dane zostaną przypisane do niego w ramach segmentu ad_group.

W przypadku tego zapytania

SELECT metrics.impressions
FROM ad_group

otrzymasz ciąg JSON podobny do tego:

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

Pamiętaj, że pole resource_name obiektu adGroup jest zawsze zwracane, ponieważ ad_group zostało określone jako zasób w klauzuli FROM.

Pola segmentów do wyboru

Nie wszystkie pola segmentu są dostępne w przypadku danego zasobu w klauzuli FROM. Na przykład nadal będziemy wysyłać zapytania do zasobu ad_group. Aby pole segmentu było dostępne w zasobie ad_group, musi ono występować na liście Segments dla zasobu ad_group. Lista Segmentsto żółta część tabeli dostępnych pól na stronie metadanych zasobu ad_group.

Zasoby segmentu

Podczas wybierania niektórych zasobów możesz mieć opcję dołączenia zasobów powiązanych w sposób domyślny, wybierając ich pola obok pól zasobu w klauzuli FROM. Te powiązane zasoby znajdziesz na liście Attributed Resources w zasobach na stronie metadanych klauzuli FROM. W przypadku zasobu ad_group możesz też wybierać pola z zasosobu campaign. Pole resource_name dowolnego zasobu Attributed Resources z co najmniej 1 polem w klauzuli SELECT zostanie automatycznie zwrócone, nawet jeśli pole resource_name nie jest wyraźnie uwzględnione w zapytaniu.

Podobnie jak w przypadku pól Attributed Resource możesz też wybierać pola Segmenting Resource. Jeśli dany zasób ma listę Segmenting Resources na stronie metadanych, wybranie pól z jednego z tych zasobów spowoduje, że zapytanie zostanie podzielone na segmenty według zwracanej wartości resource_name tego Segmenting Resource. Na przykład zasób campaign jest wymieniony jako Segmenting Resource dla zasobu campaign_budget. Wybranie dowolnego pola kampanii, np. campaign.name, z zasosobu campaign_budget spowoduje nie tylko zwrócenie pola campaign.name, ale też zwrócenie pola campaign.resource_name i dzielenie danych na podstawie tego ostatniego.

Możliwość wyboru między segmentami a danymi

Podane pole segmentu może być niezgodne z niektórymi innymi polami segmentu lub polami danych. Aby sprawdzić, które pola segmentu są ze sobą zgodne, możesz przejrzeć listę selectable_withsegmentów w klauzuli SELECT.

W przypadku zasobu ad_group możesz wybrać ponad 50 dostępnych segmentów. Lista selectable_with dla segments.hotel_check_in_date zawiera jednak znacznie mniejszy zestaw zgodnych segmentów. Oznacza to, że jeśli dodasz pole segments.hotel_check_in_date do klauzuli SELECT, ograniczysz dostępne segmenty do wyboru do przecięcia tych 2 list.

Po dodaniu niektórych segmentów dane w wierszu podsumowania mogą się zmniejszyć
Gdy do zapytania z FROM ad_group_ad dodasz segment FROM ad_group_ad, zapytanie będzie tylko pobierać wiersze danych, które zawierają słowa kluczowe, i usuwać wszystkie wiersze, które nie są powiązane ze słowem kluczowym.segments.keyword.info.match_type W tym przypadku dane byłyby niższe, ponieważ wykluczałyby wszystkie dane inne niż dotyczące słów kluczowych.

Reguły dotyczące segmentów w klauzuli WHERE

Jeśli segment występuje w klauzuli WHERE, musi też występować w klauzuli SELECT. Wyjątek stanowią te segmenty dat, które nazywamy głównymi segmentami dat:

  • segments.date
  • segments.week
  • segments.month
  • segments.quarter
  • segments.year

Reguły dotyczące pól segmentu danych podstawowych

Segmenty segments.date, segments.week, segments.month, segments.quarter i segments.year działają w ten sposób:

  • Te segmenty można filtrować w klauzuli WHERE, nie uwzględniając ich w klauzuli SELECT.

  • Jeśli któryś z tych segmentów występuje w klauzuli SELECT, w klauzuli WHERE musisz podać ograniczony zakres dat składający się z podstawowych segmentów dat (segmenty dat nie muszą być takie same jak w klauzuli SELECT).

Przykłady

Nieprawidłowe: ponieważ segments.date występuje w klauzuli SELECT, musisz w klauzuli WHERE podać ograniczony zakres dat dla segments.date, segments.week, segments.month, segments.quarter lub segments.year.
SELECT
  campaign.name,
  metrics.clicks,
  segments.date
FROM campaign
Prawidłowe: to zapytanie zwraca nazwy kampanii i kliknięcia uzyskane w wybranym zakresie dat. Pamiętaj, że w klauzuli SELECT nie musisz uwzględniać wartości segments.date.
SELECT
  campaign.name,
  metrics.clicks
FROM campaign
WHERE segments.date > '2020-01-01'
  AND segments.date < '2020-02-01'
Prawidłowe: to zapytanie zwraca nazwy kampanii i kliknięcia podzielone według daty we wszystkich dniach z wybranego zakresu dat.
SELECT
  campaign.name,
  metrics.clicks,
  segments.date
FROM campaign
WHERE segments.date > '2020-01-01'
  AND segments.date < '2020-02-01'
Prawidłowe: to zapytanie zwraca nazwy kampanii i kliknięcia podzielone według miesiąca za wszystkie dni w wybranym zakresie dat.
SELECT
  campaign.name,
  metrics.clicks,
  segments.month
FROM campaign
WHERE segments.date > '2020-01-01'
  AND segments.date < '2020-02-01'
Prawidłowe: to zapytanie zwraca nazwy kampanii i kliknięcia podzielone według kwartału, a potem według miesiąca w przypadku wszystkich miesięcy w danym roku.
SELECT
  campaign.name,
  metrics.clicks,
  segments.quarter,
  segments.month
FROM campaign
WHERE segments.year > 2015
  AND segments.year < 2020

search_term_view

Pamiętaj, że zasób search_term_view jest też niejawnie podzielony według grupy reklam, a nie tylko według wyszukiwanego hasła, co widać po strukturze nazwy zasobu, która zawiera też grupę reklam. Dlatego w wynikach zobaczysz pozornie zduplikowane wiersze z tymi samymi wyszukiwanymi hasłami, które w rzeczywistości należą do innej grupy reklam:

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

Chociaż 2 zwrócone w tym przykładzie obiekty wydają się być duplikatami, ich nazwy zasobów są w rzeczywistości różne, zwłaszcza w części „ad group” (grupa reklam). Oznacza to, że w tej samej dacie (15.06.2015 r.) wyszukiwane hasło „zdjęcia google” jest przypisywane do 2 grup reklam (o identyfikatorach 222222222233333333333). Możemy więc stwierdzić, że interfejs API działał zgodnie z oczekiwaniami i w tym przypadku nie zwrócił żadnych duplikatów obiektów.