Базовый 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==8675309ANDga: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