Как фильтровать по dimensions (ga api)?

Ссылка скопирована
1 ответ

Здравствуйте, подскажите пожалуйста. Есть запрос с фильтром по 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.">

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

Для фильтрации данных по 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 'Нет данных для указанных параметров запроса.';
}

// Устанавливаем параметры запроса $params = array( 'ids' =&gt; 'ga:123456789', // ID представления Google Analytics 'start-date' =&gt; '2021-01-01', 'end-date' =&gt; '2021-01-31', 'metrics' =&gt; 'ga:sessions', 'dimensions' =&gt; 'ga:source,ga:medium', 'filters' =&gt; 'ga:medium==organic', // Фильтр по medium (источнику) ); // Получаем данные из Google Analytics API $results = $analytics-&gt;data_ga-&gt;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, а также настроить остальные параметры запроса в соответствии с вашими требованиями.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно