Core Reporting API - 如何使用多个 dimensionFilterClauses 过滤器?

新手上路,请多包涵

我正在尝试将多个 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()

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

原文由 Gianluca 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 597
2 个回答

分析报告 API V4 过滤

ReportRequest 采用 DimensionFilterClauses 数组。这些子句与逻辑 AND 运算符组合。 IE。如果你有两个 DimensionFilterClause 对象: AB ; API 只会返回满足 A AND B 中两个条件的值。

每个 DimensionFilterClause 都采用 DimensionFilters 的数组(称为 filters )。这些过滤器与逻辑 OR 运算符组合。 IE。如果你有两个 DimensionFilter 对象 CDDimensionFilterClause 中; API 将返回满足 C 或 D 的结果。

例子

下面是一个带有两个 DimensionFilterClauses 的示例请求; ga:adWordsCampaignID==8675309 AND ga:adwordsAdGroupID==12345 API 资源管理器示例

 {
  "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 例如 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))

更新: 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"]
            }
          ]
        }
      ]
    }
  ]
}

我总是喜欢从小事做起,然后努力。通过删除其他参数和字段,我可以向自己证明什么有效,什么无效。此示例是过滤 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

原文由 Matt 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

 "dimensionFilterClauses": [
            {"operator": "AND",
             "filters": [
                {"dimensionName": "ga:adwordsCustomerID",
                 "operator": "EXACT",
                 "expressions": ["2096809090"]},
                {"dimensionName": "ga:adTargetingType",
                 "operator": "EXACT",
                 "expressions": ["Keyword"]}
            ]}
        ],

原文由 Leon Grin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题