Базовый API отчетности - Как использовать несколько фильтров DimensionFilterClauses?
Я пытаюсь использовать несколько dimensionFilterClauses в запросе Core Reporting API V4. Если я использую только фильтр на ga:adwordsCustomerID
размерность все идет хорошо, но когда я добавляю второй фильтр на ga:adTargetingType
измерение выдает ошибку "Status 400: Bad request".
Это запрос, который я написал:
return analytics.reports().batchGet(
body={"reportRequests": [{
"pageSize": 10000,
"viewId": VIEW_ID,
"dateRanges": [
{"startDate": "31daysAgo", "endDate": "yesterday"}
],
"dimensions": [
{"name": "ga:adwordsCampaignID"},
{"name": "ga:adwordsAdGroupID"},
{"name": "ga:adwordsCriteriaID"}
],
"metrics": [
{"expression": "ga:adClicks"},
{"expression": "ga:adCost"},
{"expression": "ga:uniquePurchases"},
{"expression": "ga:itemRevenue"},
{"expression": "ga:CPC"},
{"expression": "ga:ROAS"}
],
"dimensionFilterClauses": [
{"filters": [
{"dimensionName": "ga:adwordsCustomerID",
"operator": "EXACT",
"expressions": ["2096809090"]},
{"dimensionName": "ga:adTargetingType",
"operator": "EXACT",
"expressions": ["Keyword"]}
]}
],
"metricFilterClauses": [
{"filters": [
{"metricName": "ga:adCost",
"operator": "GREATER_THAN",
"comparisonValue": "0"}
]}
],
"orderBys": [
{"fieldName": "ga:adClicks",
"sortOrder": "DESCENDING"}
]}
]}
).execute()
Вы знаете, что не так с приведенным выше телом запроса?
1 ответ
API аналитики отчетов V4 Filtering
ReportRequest принимает массив DimensionFilterClauses
, Эти пункты в сочетании с логическим AND
оператор. То есть. Если бы у вас было два DimensionFilterClause
объекты: А и Б; API будет возвращать только значения, которые удовлетворяют обоим условиям в A AND
B.
каждый DimensionFilterClause
занимает массив DimensionFilters
(называется filters
). Эти фильтры в сочетании с логическим OR
оператор. То есть. если бы у вас было два DimensionFilter
объекты C и D в пределах DimensionFilterClause
; API будет возвращать результаты, которые удовлетворяют либо C, либо D.
пример
Ниже приведен пример запроса с двумя DimensionFilterClauses
; ga:adWordsCampaignID==8675309
AND
ga:adwordsAdGroupID==12345
Пример API Explorer:
{
"reportRequests":
[
{
"viewId": "XXXX",
"dimensions":
[
{"name": "ga:adwordsCampaignID"},
{"name": "ga:adwordsAdGroupID"},
{"name": "ga:adwordsCriteriaID"}
],
"metrics":
[
{"expression": "ga:adClicks"},
{"expression": "ga:adCost"}
],
"metricFilterClauses":
[
{
"filters":
[
{
"metricName": "ga:adCost",
"operator": "GREATER_THAN",
"comparisonValue": "0"
}
]
}
],
"dimensionFilterClauses":
[
{
"filters":
[
{
"dimensionName": "ga:adwordsCampaignID",
"operator": "EXACT",
"expressions": ["8675309"]
}
]
},
{
"filters":
[
{
"dimensionName": "ga:adwordsAdGroupID",
"operator": "EXACT",
"expressions":
["12345"],
}
]
}
]
}
]
}
Заключение
С самого начала не кажется, что с вашим телом запроса API что-то не так, в противном случае вы получите сообщение об ошибке. Но более вероятно, что вы не собирались запрашивать:
"dimensionFilterClauses": [
{"filters": [
{"dimensionName": "ga:adwordsCustomerID",
"operator": "EXACT",
"expressions": ["2096809090"]},
{"dimensionName": "ga:adTargetingType",
"operator": "EXACT",
"expressions": ["Keyword"]}
]}
],
Но вы намеревались запросить:
"dimensionFilterClauses": [
{"filters": [
{"dimensionName": "ga:adwordsCustomerID",
"operator": "EXACT",
"expressions": ["2096809090"]},
]},{"filters": [
{"dimensionName": "ga:adTargetingType",
"operator": "EXACT",
"expressions": ["Keyword"]}
]}
],
Моя рекомендация, когда данные не отображаются, - сначала удалить фильтр, а затем убедиться, что у вас есть точная строка, которую вы ищете. Также, если у вас нет полной строки, вы можете использовать другой filter.operator
такие как PARTIAL
или же BEGINS_WITH
,
Обработка ошибок
Также разумно использовать правильную обработку ошибок, особенно при отладке:
try:
response = analyticsreporting.reports().batchGet(
body=requestBody
).execute()
except TypeError, error:
# Handle errors in constructing a query.
print 'There was an error in constructing your query : %s' % error
except HttpError, error:
# Handle API errors.
print ('There was an API error : %s : %s' %
(error.resp.status, error.resp.reason))
Обновлено: ga:adTargetingType==Keyword
пример
Из комментария ниже было предложено привести пример фильтра измерений с ga:adTargetingType==Keyword
, Используйте пример API здесь, чтобы доказать себе, что он работает (просто измените VIEW_ID
в вашем представлении просмотрите идентификатор и нажмите "Авторизовать и выполнить"). JSON тело ниже:
{
"reportRequests":
[
{
"viewId": "VIEW_ID",
"metrics": [{"expression": "ga:sessions"}],
"dimensions": [{"name": "ga:adTargetingType"}],
"dimensionFilterClauses":
[
{
"filters":
[
{
"dimensionName": "ga:adTargetingType",
"operator": "EXACT",
"expressions": ["Keyword"]
}
]
}
]
}
]
}
Мне всегда нравится начинать с малого и работать. Удаляя другие параметры и поля, я могу доказать себе, что работает, а что нет. Этот пример является минимально необходимым запросом, который фильтрует ga:keyword==Keyword
,
Второе обновление:
Фактическое сообщение об ошибке, которое вы получаете, выглядит следующим образом:
"Selected dimensions and metrics cannot be queried together."
Размерность ga:adTargetingType
не может быть запрошен со следующими показателями:
ga:impressions
ga:adClicks
ga:adCost
ga:CPM
ga:CPC
ga:CTR
ga:costPerTransaction
ga:costPerGoalConversion
ga:costPerConversion
ga:RPC
ga:ROAS
Важной частью информации, которая отсутствует на этой странице, является использование FilterLogicalOperator. Это оператор для объединения нескольких фильтров измерений. Если не указано иное, это рассматривается как ИЛИ. Итак, ответ выше, в котором говорится, что по умолчанию И, неверен.
Чтобы применить оба фильтра, нам нужно добавить в код FilterLogicalOperator:
"dimensionFilterClauses": [
{"operator": "AND",
"filters": [
{"dimensionName": "ga:adwordsCustomerID",
"operator": "EXACT",
"expressions": ["2096809090"]},
{"dimensionName": "ga:adTargetingType",
"operator": "EXACT",
"expressions": ["Keyword"]}
]}
],
"dimensions":
[
{"name": "ga:adwordsCampaignID"},
{"name": "ga:adwordsAdGroupID"},
{"name": "ga:adwordsCriteriaID"}
],
"metrics":
[
{"expression": "ga:adClicks"},
{"expression": "ga:adCost"}
],
Код сможет вызывать несколько измерений без фильтра. Если вы хотите узнать, какие измерения и метрики, используйте ссылку: GA Dimensions and Metrics