核心报告API - 如何使用多个dimensionFilterClauses过滤器?

Gia*_*uca 8 python google-analytics google-analytics-api python-3.x google-analytics-firebase

我正在尝试将多个dimensionFilterClauses用于Core Reporting API V4查询.如果我只使用ga:adwordsCustomerID维度上的过滤器一切正常,但是当我在ga:adTargetingType维度上添加第二个过滤器时,它会抛出"状态400:错误请求"错误.

这是我写的查询:

    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()
Run Code Online (Sandbox Code Playgroud)

你知道上面的查询体有什么问题吗?

Mat*_*att 11

Analytics Reporting API V4 过滤

所述的ReportRequest需要的阵列DimensionFilterClauses.这些子句与逻辑AND运算符组合在一起.IE浏览器.如果你有两个DimensionFilterClause对象:AB ; API将仅返回满足A ANDB中两个条件的值.

每个都DimensionFilterClause采用一个DimensionFilters(调用filters)数组.这些过滤器与逻辑OR运算符组合在一起.IE浏览器.如果你有一个DimensionFilter对象CD在一个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"],
            }
          ]
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

结论

从一开始,您的API请求正文似乎没有任何问题,如果有,您会收到错误消息.但是你更有可能不打算要求:

        "dimensionFilterClauses": [
            {"filters": [
                {"dimensionName": "ga:adwordsCustomerID",
                 "operator": "EXACT",
                 "expressions": ["2096809090"]},
                {"dimensionName": "ga:adTargetingType",
                 "operator": "EXACT",
                 "expressions": ["Keyword"]}
            ]}
        ],
Run Code Online (Sandbox Code Playgroud)

但您打算请求:

        "dimensionFilterClauses": [
            {"filters": [
                {"dimensionName": "ga:adwordsCustomerID",
                 "operator": "EXACT",
                 "expressions": ["2096809090"]},
            ]},{"filters": [
                {"dimensionName": "ga:adTargetingType",
                 "operator": "EXACT",
                 "expressions": ["Keyword"]}
            ]}
        ],
Run Code Online (Sandbox Code Playgroud)

我没有数据显示的建议是首先删除过滤器,然后验证您是否具有要搜索的确切字符串.此外,如果您没有完整的字符串,您可以使用不同的或filter.operator如.PARTIALBEGINS_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))
Run Code Online (Sandbox Code Playgroud)

更新:ga:adTargetingType==Keyword示例

从下面的评论中,要求提供维度过滤器的示例ga:adTargetingType==Keyword.使用此处API示例向您自己证明它可以工作(只需更改VIEW_ID到您的视图视图ID并点击"授权和执行").JSON正文如下:

{
  "reportRequests": 
  [
    {
      "viewId": "VIEW_ID",
      "metrics": [{"expression": "ga:sessions"}],
      "dimensions": [{"name": "ga:adTargetingType"}],
      "dimensionFilterClauses": 
      [
        {
          "filters": 
          [
            {
              "dimensionName": "ga:adTargetingType",
              "operator": "EXACT",
              "expressions": ["Keyword"]
            }
          ]
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我总是喜欢从小做起并努力工作.通过删除其他参数和字段,我可以向自己证明什么是有效的,什么不是.此示例是筛选的最低要求请求ga:keyword==Keyword.

第二次更新:

您收到的实际错误消息如下:

"Selected dimensions and metrics cannot be queried together."
Run Code Online (Sandbox Code Playgroud)

ga:adTargetingType无法使用以下指标查询维度:

  • ga:impressions
  • ga:adClicks
  • ga:adCost
  • ga:CPM
  • ga:CPC
  • ga:CTR
  • ga:costPerTransaction
  • ga:costPerGoalConversion
  • ga:costPerConversion
  • ga:RPC
  • ga:ROAS


小智 5

此页面中缺少的一条重要信息是FilterLogicalOperator的使用。这是用于组合多个维度过滤器的运算符。如果未指定,则将其视为 OR。因此,上面的答案说默认值是 AND 是不正确的。

为了应用这两个过滤器,我们需要在代码中添加 FilterLogicalOperator:

"dimensionFilterClauses": [
            {"operator": "AND",
             "filters": [
                {"dimensionName": "ga:adwordsCustomerID",
                 "operator": "EXACT",
                 "expressions": ["2096809090"]},
                {"dimensionName": "ga:adTargetingType",
                 "operator": "EXACT",
                 "expressions": ["Keyword"]}
            ]}
        ],
Run Code Online (Sandbox Code Playgroud)