Google analytics Google Analytics Reporting Api v4报告请求响应具有行计数但为空的行元素

Google analytics Google Analytics Reporting Api v4报告请求响应具有行计数但为空的行元素,google-analytics,google-analytics-api,google-analytics-firebase,Google Analytics,Google Analytics Api,Google Analytics Firebase,我有980多个ViewID,每天都在运行报告请求。它们正在加载到rs db中 我让报告请求对所有ID进行最初3个月的回填运行 在检查数据时,我们注意到一些ID似乎没有为它们运行回填。我查看了日志,没有收到来自api的任何错误 我开始对单个viewid运行单报告请求,并在响应中返回行值 我在发出请求的应用程序中添加了更多日志记录,因为我想我可能只是没有捕捉到错误 在前850年左右,我得到了预期的结果。过去3个月的数据(如有) 我最近收到的100多个ID中,有行数、最大值、最小值和总计值不为0且为空

我有980多个ViewID,每天都在运行报告请求。它们正在加载到rs db中

我让报告请求对所有ID进行最初3个月的回填运行

在检查数据时,我们注意到一些ID似乎没有为它们运行回填。我查看了日志,没有收到来自api的任何错误

我开始对单个viewid运行单报告请求,并在响应中返回行值

我在发出请求的应用程序中添加了更多日志记录,因为我想我可能只是没有捕捉到错误

在前850年左右,我得到了预期的结果。过去3个月的数据(如有)

我最近收到的100多个ID中,有行数、最大值、最小值和总计值不为0且为空行元素的ViewID的响应。这就是我现在被困的地方。不确定这是错误还是api的功能。在任何地方都找不到以前提到过的任何类似问题

一些注意事项:

我们每天在一台服务器上同时运行12个报告请求。在Api控制台中,我们每天看到大约12000个请求。发出请求的是一个节点应用程序。在对所有ViewID执行每日报告请求时,我们没有注意到这种情况,我们没有达到每天50000个请求的限制,我们确实实现了指数级回退,当遇到速率限制错误时,我们正在重试

我们的一个报告请求示例:

`{
"reportRequests": [
{
"dateRanges": [
{
  "startDate": "2017-06-01",
   "endDate" : "2017-09-01"
}
],
"metrics": [
  {"expression": "ga:entrances"}, 
  {"expression": "ga:goalAbandonsAll"}, 
  {"expression": "ga:users"}, 
  {"expression": "ga:sessions"}, 
  {"expression": "ga:bounces"}, 
  {"expression": "ga:goalStartsAll"}, 
  {"expression": "ga:sessionDuration"}, 
  {"expression": "ga:goalValueAll"}, 
  {"expression": "ga:pageviews"}, 
  {"expression": "ga:timeOnPage"}
],
"pageSize": 10000, 
"includeEmptyRows": true, 
"dimensions": [
  {"name": "ga:adwordsCreativeID"},
  {"name": "ga:adSlot"},
  {"name": "ga:adTargetingType"},
  {"name": "ga:adDistributionNetwork"},
  {"name": "ga:adKeywordMatchType"},
  {"name": "ga:hour"},
  {"name": "ga:date"}
],
"samplingLevel": "LARGE",
"viewId": "123456789"
}
]
}`
我们看到奇怪的反应:

`{
"columnHeader":{
"dimensions":[
"ga:adwordsCreativeID",
"ga:adSlot",
"ga:adTargetingType",
"ga:adDistributionNetwork",
"ga:adKeywordMatchType",
"ga:hour",
"ga:date"
],
"metricHeader":{
"metricHeaderEntries":[
{"name":"ga:entrances","type":"INTEGER"},{"name":"ga:goalAbandonsAll","type":"INTEGER"},{"name":"ga:users","type":"INTEGER"},{"name":"ga:sessions","type":"INTEGER"},{"name":"ga:bounces","type":"INTEGER"},{"name":"ga:goalStartsAll","type":"INTEGER"},{"name":"ga:sessionDuration","type":"TIME"},{"name":"ga:goalValueAll","type":"CURRENCY"},{"name":"ga:pageviews","type":"INTEGER"},{"name":"ga:timeOnPage","type":"TIME"}
]
}},
"data":{
"totals":[
{"values":["1235","0","1245","1235","1091","0","63517.0","0.0","1450","63515.0"]}
],
"rowCount":602,
"minimums":[
{"values":["0","0","1","0","0","0","0.0","0.0","1","0.0"]}
],
"maximums":[
{"values":["10","0","10","10","8","0","4920.0","0.0","16","4909.0"]}
],
"rows":[]}`

你找到关于这个问题的更多信息了吗?如果你从Google Analytics得到一个“空”报告(只包含min/max/totals)作为回应,那么发送一个新的请求将解决这个问题。 检查报表['data]['rows']是确定报表是否为“空”的一种方法


很高兴我不是唯一一个发生这种事的人,但不高兴它发生了。我很想听到谷歌开发人员讲述可能发生的事情。
response = [...]
while self.is_response_empty(response):
    response = [...]

def is_response_empty(self, response):
    for report in response.get('reports', []):
        try:
            report['data']['rows']
            return False
        except:
            return True