Python AWQL:在产品分区报告中包含设备类型会导致更少的零印象数据?

Python AWQL:在产品分区报告中包含设备类型会导致更少的零印象数据?,python,api,google-ads-api,Python,Api,Google Ads Api,我在产品分区报告中发现了一些差异 因此,在我发布测试脚本并给出一些解释之前,我想问一下我的问题: 为什么AdWords会有这样的行为? 这种行为是正常的还是错误的? 下面是我用Python编写的小测试脚本,用于通过AWQL查询AdWords购物数据产品组,并将结果存储为CSV: from googleads import AdWordsClient startdate = '20150801' enddate = '20151130' ADWORDS_API_VERSION = 'v20150

我在产品分区报告中发现了一些差异

因此,在我发布测试脚本并给出一些解释之前,我想问一下我的问题:

为什么AdWords会有这样的行为? 这种行为是正常的还是错误的? 下面是我用Python编写的小测试脚本,用于通过AWQL查询AdWords购物数据产品组,并将结果存储为CSV:

from googleads import AdWordsClient

startdate = '20150801'
enddate = '20151130'
ADWORDS_API_VERSION = 'v201509'

client = AdWordsClient.LoadFromStorage('adwords.yaml')
client.client_customer_id = 'XXX-XXX-XXXX'
report_downloader = client.GetReportDownloader(version=ADWORDS_API_VERSION)

queries = {
    # (1) 
    'product_groups_without_device_split': (
        "SELECT CampaignName, CampaignId, AdGroupName, AdGroupId, "
        "ProductGroup, Impressions, Clicks, Conversions "
        "FROM PRODUCT_PARTITION_REPORT "
        "WHERE CampaignStatus IN ['ENABLED', 'PAUSED'] "
        "AND AdGroupStatus IN ['ENABLED', 'PAUSED'] "
        "AND PartitionType = UNIT AND Impressions > 0 "
        "DURING %s,%s"
    ),
    # (2) 
    'product_groups_without_device_split_zero_impressions': (
        "SELECT CampaignName, CampaignId, AdGroupName, AdGroupId, "
        "ProductGroup "
        "FROM PRODUCT_PARTITION_REPORT "
        "WHERE CampaignStatus IN ['ENABLED', 'PAUSED'] "
        "AND AdGroupStatus IN ['ENABLED', 'PAUSED'] "
        "AND PartitionType = UNIT AND Impressions = 0 "
        "DURING %s,%s"
    ),
    # (3)
    'product_groups': (
        "SELECT CampaignName, CampaignId, AdGroupName, AdGroupId, "
        "ProductGroup, Device, Impressions, Clicks, Conversions "
        "FROM PRODUCT_PARTITION_REPORT "
        "WHERE CampaignStatus IN ['ENABLED', 'PAUSED'] "
        "AND AdGroupStatus IN ['ENABLED', 'PAUSED'] "
        "AND PartitionType = UNIT AND Impressions > 0 "
        "DURING %s,%s"
    ),
    # (4)
    'product_groups_zero_impressions': (
        "SELECT CampaignName, CampaignId, AdGroupName, AdGroupId, "
        "ProductGroup, Device "
        "FROM PRODUCT_PARTITION_REPORT "
        "WHERE CampaignStatus IN ['ENABLED', 'PAUSED'] "
        "AND AdGroupStatus IN ['ENABLED', 'PAUSED'] "
        "AND PartitionType = UNIT AND Impressions = 0 "
        "DURING %s,%s"
    )
}

for name, awqlQueryTpl in queries.iteritems():
    awqlQuery = awqlQueryTpl % (startdate, enddate)
    with open(name+'.csv', 'w') as file_:
        report_downloader.DownloadReportWithAwql(awqlQuery, 'CSV', file_,
            skip_report_header=True, skip_column_header=False,
            skip_report_summary=True)
合理的数据被删掉了

对这些问题的一些解释:

第一个查询包含统计数据,但没有设备拆分。当选择了诸如印象、点击等统计属性时,不能返回零印象

此查询不包含统计数据,因此我可以获得没有印象的缺失数据。这里没有拆分设备

此查询包含统计数据,数据按devicetype进行拆分。此处无法返回零印象

此查询没有统计数据,但具有设备类型拆分。此处仅返回零印象数据

我组合了查询1+2=案例A和查询3+4=案例B的结果。 对于案例B,我合并了按设备类型拆分的数据。所以,相比之下,这个结果和A的结果应该是相同的——但事实并非如此! 虽然这两种情况下的统计数据相匹配,但在零印象数据中可以发现差异——A中的条目比B中的条目多900多条

当我在没有设备但包含零印象4的情况下进行查询时,我也会得到零印象且暂停的活动,这正是我想要的。但当我用设备3查询时,我根本就不知道这些活动

我已经两次证明了这一点:我在合并和比较数据时没有出错。我用关键字性能报告中的数据做了同样的测试,完全没有问题

我希望这是足够的信息在这里得到一些帮助


请参阅我上面的问题。

好的,解决方案是将include\u zero\u impressions=True添加到DownloadReportWithAwql函数,并从查询中删除impressions=0:

for name, awqlQueryTpl in queries.iteritems():
    awqlQuery = awqlQueryTpl % (startdate, enddate)
    with open(name+'.csv', 'w') as file_:
        report_downloader.DownloadReportWithAwql(awqlQuery, 'CSV', file_,
            skip_report_header=True, skip_column_header=False,
            skip_report_summary=True, include_zero_impressions=True)
我认为在查询本身中使用impressions=0和impressions>0具有相同的效果,但似乎我的预期是错误的