Podział na segmenty

Segmentację, dostępną w interfejsie Google Ads jako osobne menu, można wdrożyć w interfejsie Google Ads API, dodając do zapytania odpowiednie pole. Na przykład dodanie do zapytania parametru segments.device powoduje utworzenie raportu z wierszem na każdą kombinację urządzenia i zasobu określonego w klauzuli FROM oraz wartościami statystycznymi (wyświetlenia, kliknięcia, konwersje itp.) podzielonymi między te usługi.

W interfejsie Google Ads można używać tylko jednego segmentu naraz, a interfejs API pozwala określić wiele segmentów dla tego samego zapytania.

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

Wyniki wysłania tego zapytania do GoogleAdsService.SearchStream powinny 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ą podzielone według urządzenia, więc ta sama kampania może zwracać co najmniej 2 obiekty.

Podział na segmenty niejawne

Każdy raport jest początkowo dzielony według zasobu określonego w klauzuli FROM. Pole resource_name zasobu w klauzuli FROM jest zwracane, a dane są według niego segmentowane, nawet jeśli pole resource_name nie jest wyraźnie uwzględnione w zapytaniu. Jeśli na przykład podasz ad_group jako zasób w klauzuli FROM, automatycznie zwrócimy wartość ad_group.resource_name, a dane będą jej domyślnie posegmentować na poziomie grupy reklam.

W tym zapytaniu

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 elementu adGroup jest zawsze zwracane, ponieważ w klauzuli FROM jako zasób podano ad_group.

Pola segmentów do wyboru

Nie wszystkie pola segmentu można wybrać w przypadku danego zasobu w klauzuli FROM. Na przykład w dalszym ciągu będziemy wysyłać zapytania do zasobu ad_group. Aby można było wybrać pole segmentu z zasobu ad_group, musi ono występować na liście Segments grupy ad_group. Lista Segments to żółta część tabeli dostępnych pól na stronie metadanych zasobu ad_group.

Segmentowanie zasobów

Podczas wybierania spośród niektórych zasobów możesz mieć możliwość niejawnego złączenia powiązanych zasobów przez wybranie ich pól obok pól zasobu w klauzuli FROM. Te powiązane zasoby znajdziesz na liście Attributed Resources zasobu na stronie metadanych klauzuli FROM. W przypadku zasobu ad_group zobaczysz, że można też wybrać pola z zasobu campaign. Pole resource_name każdego elementu Attributed Resources, które w klauzuli SELECT zawiera co najmniej 1 pole, jest zwracane automatycznie, nawet jeśli w zapytaniu nie występuje pole resource_name.

Podobnie jak w przypadku wybierania pól Attributed Resource, możesz też wybrać tyle pól: Segmenting Resource. Jeśli na stronie metadanych danego zasobu znajduje się lista Segmenting Resources, wybór pól z jednego z tych zasobów spowoduje podzielenie zapytania na segmenty według zwróconej wartości resource_name z tego zasobu (Segmenting Resource). Na przykład zobaczysz, że zasób campaign jest wymieniony jako Segmenting Resource dla zasobu campaign_budget. Wybranie z zasobu campaign_budget dowolnego pola kampanii, np. campaign.name, nie tylko spowoduje zwrócenie pola campaign.name, ale też zwrócenie i podzielenie pola campaign.resource_name na segmenty.

Możliwość wyboru segmentów i danych

Wybrane pole segmentu może być niezgodne z niektórymi polami segmentu lub z niektórymi polami danych. Aby sprawdzić, które pola segmentów są ze sobą zgodne, przejrzyj listę selectable_with segmentów w klauzuli SELECT.

W przypadku zasobu ad_group dostępnych jest ponad 50 segmentów, które możesz wybrać. Lista selectable_with dla domeny segments.hotel_check_in_date to 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 części wspólnej tych 2 list.

Gdy dodasz niektóre segmenty, dane w wierszu podsumowania mogą się zmniejszyć
Gdy do zapytania z parametrem FROM ad_group_ad dodasz segments.keyword.info.match_type, segment ten spowoduje, że otrzyma ono tylko wiersze danych zawierające słowa kluczowe i usunie wszystkie wiersze, które nie są powiązane z żadnym słowem kluczowym. W takim przypadku dane będą niższe, ponieważ wykluczone będą wszystkie dane niezwiązane ze słowami kluczowymi.

Reguły dla segmentów w klauzuli WHERE

Gdy segment jest w klauzuli WHERE, musi on też znajdować się w klauzuli SELECT. Wyjątkiem od tej reguły są te segmenty dat, które są nazywane głównymi segmentami dat:

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

Reguły dla pól głównego segmentu dat

Segmenty segments.date, segments.week, segments.month, segments.quarter i segments.year działają tak:

  • Te segmenty można filtrować w klauzuli WHERE, nawet jeśli nie pojawia się w klauzuli SELECT.

  • Jeśli którykolwiek z tych segmentów znajduje się w klauzuli SELECT, w klauzuli WHERE musisz określić ograniczony zakres dat składający się z głównych segmentów dat (segmenty dat nie muszą być takie same jak segmenty określone w polu SELECT).

Przykłady

Błąd: segments.date znajduje się w klauzuli SELECT, więc w klauzuli WHERE dla właściwości segments.date, segments.week, segments.month, segments.quarter lub segments.year musisz określić ograniczony zakres dat.
SELECT
  campaign.name,
  metrics.clicks,
  segments.date
FROM campaign
Prawidłowe: to zapytanie zwraca nazwy kampanii i kliknięcia zgromadzone w wybranym zakresie dat. Pamiętaj, że segments.date nie musi występować w klauzuli SELECT.
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 posegmentowane według daty ze wszystkich dni w zakresie 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 posegmentowane według miesiąca dla wszystkich dni w 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 posegmentowane według kwartału, a następnie według miesiąca dla wszystkich miesięcy w zakresie rocznym.
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 w przypadku zasobu search_term_view jest on też domyślnie dzielony według grupy reklam, a nie tylko wyszukiwanego hasła, co odzwierciedla struktura nazwy zasobu, który zawiera też grupę reklam. W związku z tym w wynikach pojawią się pozornie zduplikowane wiersze z tymi samymi wyszukiwanymi hasłami, choć w rzeczywistości będą one należeć 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ż dwa zwrócone obiekty w tym przykładzie wydają się duplikatami, w rzeczywistości ich nazwy zasobów są różne, zwłaszcza w części „grupa reklam”. Oznacza to, że wyszukiwane hasło „zdjęcia Google” zostało przypisane do 2 grup reklam (identyfikatory 2222222222 i 33333333333) w tym samym dniu (15.06.2015 r.). Możemy więc stwierdzić, że interfejs API działał zgodnie z oczekiwaniami i w tym przypadku nie zwrócił zduplikowanych obiektów.