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
dodaszsegments.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 klauzuliSELECT
.Jeśli którykolwiek z tych segmentów znajduje się w klauzuli
SELECT
, w klauzuliWHERE
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 poluSELECT
).
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.