核心报告API如何使用多维过滤器clauses filters?

2024-04-26 05:03:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在核心报告API V4查询中使用多维过滤器clauses。如果我只在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()

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


Tags: name过滤器核心operatorfiltersexpressionsexactexpression
3条回答

本页缺少的关键信息是FilterLogicalOperator的使用。这是用于组合多维过滤器的运算符。如果未指定,则将其视为或。所以,上面的答案是,违约是正确的,而不是错误的。

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

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

分析报告API V4 Filtering

ReportRequest接受一个由DimensionFilterClauses组成的数组。这些子句与逻辑AND运算符组合在一起。也就是说,如果有两个DimensionFilterClause对象:AB;API将只返回满足AANDB中这两个条件的值

每个^{}接受一个DimensionFilters(称为filters)数组。这些过滤器与逻辑OR运算符组合在一起。即,如果在一个DimensionFilterClause中有两个DimensionFilter对象CD,则API将返回满足C或D的结果

示例

下面是一个带有两个DimensionFilterClausesga:adWordsCampaignID==8675309ANDga:adwordsAdGroupID==12345的示例请求 API Explorer example

{
  "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"]}
            ]}
        ],

当没有数据显示时,我的建议是首先删除过滤器,然后验证您是否有正在搜索的确切字符串。如果没有完整的字符串,也可以使用不同的^{},例如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 Example here向您证明它是有效的(只需将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
"dimensions": 
      [
        {"name": "ga:adwordsCampaignID"},
        {"name": "ga:adwordsAdGroupID"},
        {"name": "ga:adwordsCriteriaID"}
      ],
      "metrics": 
      [
        {"expression": "ga:adClicks"},
        {"expression": "ga:adCost"}
      ],

代码将能够调用多个维度而无需筛选。如果要知道哪些维度和度量,请使用链接: GA Dimensions and Metrics

相关问题 更多 >