Как фильтровать по dimensions (ga api)?
Здравствуйте, подскажите пожалуйста. Есть запрос с фильтром по metrics. Он работает и все отдает.
DIMENSIONS = ['ga:source','ga:medium'] METRICS = ['ga:users','ga:sessions','ga:adCost'] def initialize_analyticsreporting(): credentials = ServiceAccountCredentials.from_json_keyfile_name( KEY_FILE_LOCATION, SCOPES) # Build the service object. analytics = build('analyticsreporting', 'v4', credentials=credentials) return analytics def get_report(analytics): return analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '14daysAgo', 'endDate': 'today'}], 'metrics': [{'expression':i} for i in METRICS], 'dimensions': [{'name':j} for j in DIMENSIONS], "metricFilterClauses": # Описание фильтра [ { "filters": [ { "metricName": "ga:adCost", "operator": "GREATER_THAN", # Значение показателя должно быть больше comparisonValue. "comparisonValue": "0" } ] } ] }] } ).execute() |
DIMENSIONS = ['ga:source','ga:medium'] METRICS = ['ga:users','ga:sessions','ga:adCost'] def initialize_analyticsreporting(): credentials = ServiceAccountCredentials.from_json_keyfile_name( KEY_FILE_LOCATION, SCOPES) # Build the service object. analytics = build('analyticsreporting', 'v4', credentials=credentials) return analytics def get_report(analytics): return analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '14daysAgo', 'endDate': 'today'}], 'metrics': [{'expression':i} for i in METRICS], 'dimensions': [{'name':j} for j in DIMENSIONS], "metricFilterClauses": # Описание фильтра [ { "filters": [ { "metricName": "ga:adCost", "operator": "GREATER_THAN", # Значение показателя должно быть больше comparisonValue. "comparisonValue": "0" } ] } ] }] } ).execute()
Но когда я пытаюсь выставить фильтр, например, по ga:source
DIMENSIONS = ['ga:source'] METRICS = ['ga:users'] def initialize_analyticsreporting(): credentials = ServiceAccountCredentials.from_json_keyfile_name( KEY_FILE_LOCATION, SCOPES) # Build the service object. analytics = build('analyticsreporting', 'v4', credentials=credentials) return analytics def get_report(analytics): return analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '14daysAgo', 'endDate': 'today'}], 'metrics': [{'expression':i} for i in METRICS], 'dimensions': [{'name':j} for j in DIMENSIONS], "metricFilterClauses": # Описание фильтра [ { "filters": [ { "dimensionName": "ga:source", "operator": "EXACT", "expressions": ["google"] } ] } ] }] } ).execute() |
DIMENSIONS = ['ga:source'] METRICS = ['ga:users'] def initialize_analyticsreporting(): credentials = ServiceAccountCredentials.from_json_keyfile_name( KEY_FILE_LOCATION, SCOPES) # Build the service object. analytics = build('analyticsreporting', 'v4', credentials=credentials) return analytics def get_report(analytics): return analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '14daysAgo', 'endDate': 'today'}], 'metrics': [{'expression':i} for i in METRICS], 'dimensions': [{'name':j} for j in DIMENSIONS], "metricFilterClauses": # Описание фильтра [ { "filters": [ { "dimensionName": "ga:source", "operator": "EXACT", "expressions": ["google"] } ] } ] }] } ).execute()
То выдает ошибку:
Invalid value at 'report_requests[0].metric_filter_clauses[0].filters[0].operator' (TYPE_ENUM), "EXACT"
Invalid JSON payload received. Unknown name "expressions" at 'report_requests[0].metric_filter_clauses[0].filters[0]': Cannot find field.">
Подскажите в чем может быть проблема. В итоге по любым показателям фильтр работает, по любым параметрам нет.
Дополнительно:
проверяйте через тестилку, возвращается ли что-то вообще
нужно понимать, что Гугл не дает данных, угрожающих его бизнес-модели
например, нельзя получить стоимость клика конкретного юзера из конкретной страны по конкретному запросу
по сумме - сколько угодно: все клики из USA, все клики по запросу, все клики от EN, суммируй - дели как хочешь...
так что не все желаемые фильтры работают, даже если кажется что должны
- Спасибо, благодаря вам понял в чем была ошибка.
Пока составлял запрос здесь
https://developers.google.com/analytics/devguides/...
наткнулся на то что не изменил metricFilterClauses на dimensionFilterClauses
Ответы:
Ну так всё просто жеж. API не может достать вам такие значения, т.к. referral это medium :)
- прошу прощения, не то удалил, когда сюда вставлял с правкой, поправил на
DIMENSIONS = ['ga:source'] METRICS = ['ga:users'] def initialize_analyticsreporting(): credentials = ServiceAccountCredentials.from_json_keyfile_name( KEY_FILE_LOCATION, SCOPES) # Build the service object. analytics = build('analyticsreporting', 'v4', credentials=credentials) return analytics def get_report(analytics): return analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '14daysAgo', 'endDate': 'today'}], 'metrics': [{'expression':i} for i in METRICS], 'dimensions': [{'name':j} for j in DIMENSIONS], "metricFilterClauses": # Описание фильтра начинается здесь. [ { "filters": [ { "dimensionName": "ga:source", "operator": "EXACT", "expressions": ["google"] } ] } ] }] } ).execute()
DIMENSIONS = ['ga:source'] METRICS = ['ga:users'] def initialize_analyticsreporting(): credentials = ServiceAccountCredentials.from_json_keyfile_name( KEY_FILE_LOCATION, SCOPES) # Build the service object. analytics = build('analyticsreporting', 'v4', credentials=credentials) return analytics def get_report(analytics): return analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '14daysAgo', 'endDate': 'today'}], 'metrics': [{'expression':i} for i in METRICS], 'dimensions': [{'name':j} for j in DIMENSIONS], "metricFilterClauses": # Описание фильтра начинается здесь. [ { "filters": [ { "dimensionName": "ga:source", "operator": "EXACT", "expressions": ["google"] } ] } ] }] } ).execute()
но ошибка осталась:
Invalid value at 'report_requests[0].metric_filter_clauses[0].filters[0].operator' (TYPE_ENUM), "EXACT"
Invalid JSON payload received. Unknown name "expressions" at 'report_requests[0].metric_filter_clauses[0].filters[0]': Cannot find field.">
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для фильтрации данных по dimensions (измерениям) в Google Analytics API можно использовать параметр filters. Этот параметр позволяет указать условия, по которым будут отфильтрованы данные перед их выводом.
Пример использования фильтрации по dimensions (измерениям) в Google Analytics API с помощью PHP:
// Устанавливаем параметры запроса $params = array( 'ids' => 'ga:123456789', // ID представления Google Analytics 'start-date' => '2021-01-01', 'end-date' => '2021-01-31', 'metrics' => 'ga:sessions', 'dimensions' => 'ga:source,ga:medium', 'filters' => 'ga:medium==organic', // Фильтр по medium (источнику) ); // Получаем данные из Google Analytics API $results = $analytics->data_ga->get( 'ga:' . $params['ids'], $params['start-date'], $params['end-date'], $params['metrics'], $params['dimensions'], $params['filters'] ); // Обработка результатов запроса if (!empty($results['rows'])) { foreach ($results['rows'] as $row) { // Выводим данные по dimensions (измерениям) с примененным фильтром echo 'Источник: ' . $row[0] . ', Medium: ' . $row[1] . ', Количество сессий: ' . $row[2] . '<br>'; } } else { echo 'Нет данных для указанных параметров запроса.'; }
В данном примере мы задали фильтр по параметру ga:medium, чтобы отобразить только органический трафик. Можно также использовать другие операторы фильтрации, такие как "contains", "matches", "startswith" и другие, чтобы настроить фильтрацию данных по нужным критериям.
Не забудьте заменить 'ga:123456789' на ID вашего представления Google Analytics, а также настроить остальные параметры запроса в соответствии с вашими требованиями.