Thank you for your reply.
Yes I understand the point that when setting includeZeroImpressions = false, "Impressions" is not the only field that adwords api checks if it's 0 or not, couple more fields also matter.
But in my Case 2 above, I set includeZeroImpressions = false (same as Case 1), and I included the "Impressions"(together with "Cost","Clicks") field in my report download request (which is the only difference from Case 1). But in case 2, in the report, this creative does not show up (meaning the impression and all related metric fields are actually 0), but in Case 1, it shows up in the report.
Here is the report definition in Case 1, that the creative with impression = 0 shows in report.
Ad,Headline 1,Headline 2,Description,Description line 1,Description line 2,Ad type,Ad state,Display URL,Path 1,Path 2,Custom parameter,Tracking template,Final URL,Mobile final URL,Device preference,Image Width,Image Height,Image Ad URL,Ad ID,Ad group ID,Campaign ID,Responsive Search Ad path 1,Responsive Search Ad path 2,Short headline,Long headline,Gmail ad marketing image headline,Gmail ad marketing image description
,mpm-1340-head-line-1,mpm-1340-head-line-2,mpm-1340-desc-1,,,Expanded text ad,enabled,,p1,p2, --, --,"[""
https://www.powpow.com""]", --, --, --, --, --,378574373950,78915899202,
6455474065, --, --, --, --, --, --
Here is the report definition in Case 2, that the creative with impression = 0 does not show in report. The only difference is in Case 2 here, we have 3 more fields requested, "Impressions", "Cost" and "Clicks".
<?xml version="1.0" encoding="UTF-8"?>
<reportDefinition xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201809">
<ns2:selector>
<ns2:fields>Headline</ns2:fields>
<ns2:fields>HeadlinePart1</ns2:fields>
<ns2:fields>HeadlinePart2</ns2:fields>
<ns2:fields>Description</ns2:fields>
<ns2:fields>Description1</ns2:fields>
<ns2:fields>Description2</ns2:fields>
<ns2:fields>AdType</ns2:fields>
<ns2:fields>Status</ns2:fields>
<ns2:fields>DisplayUrl</ns2:fields>
<ns2:fields>Path1</ns2:fields>
<ns2:fields>Path2</ns2:fields>
<ns2:fields>CreativeUrlCustomParameters</ns2:fields>
<ns2:fields>CreativeTrackingUrlTemplate</ns2:fields>
<ns2:fields>CreativeFinalUrls</ns2:fields>
<ns2:fields>CreativeFinalMobileUrls</ns2:fields>
<ns2:fields>DevicePreference</ns2:fields>
<ns2:fields>ImageCreativeImageWidth</ns2:fields>
<ns2:fields>ImageCreativeImageHeight</ns2:fields>
<ns2:fields>ImageAdUrl</ns2:fields>
<ns2:fields>Id</ns2:fields>
<ns2:fields>AdGroupId</ns2:fields>
<ns2:fields>CampaignId</ns2:fields>
<ns2:fields>ResponsiveSearchAdPath1</ns2:fields>
<ns2:fields>ResponsiveSearchAdPath2</ns2:fields>
<ns2:fields>ShortHeadline</ns2:fields>
<ns2:fields>LongHeadline</ns2:fields>
<ns2:fields>MarketingImageHeadline</ns2:fields>
<ns2:fields>MarketingImageDescription</ns2:fields>
<ns2:fields>Impressions</ns2:fields>
<ns2:fields>Cost</ns2:fields>
<ns2:fields>Clicks</ns2:fields>
<ns2:predicates>
<ns2:field>CampaignId</ns2:field>
<ns2:operator>IN</ns2:operator>
<ns2:values>6455474065</ns2:values>
</ns2:predicates>
<ns2:predicates>
<ns2:field>AdType</ns2:field>
<ns2:operator>NOT_IN</ns2:operator>
<ns2:values>SHOWCASE_AD</ns2:values>
</ns2:predicates>
<ns2:dateRange>
<ns2:min>20190814</ns2:min>
<ns2:max>20190821</ns2:max>
</ns2:dateRange>
</ns2:selector>
<ns2:reportName>AD_STRUCTURE</ns2:reportName>
<ns2:reportType>AD_PERFORMANCE_REPORT</ns2:reportType>
<ns2:dateRangeType>CUSTOM_DATE</ns2:dateRangeType>
<ns2:downloadFormat>GZIPPED_CSV</ns2:downloadFormat>
</reportDefinition>
This is the content in the report (no creative, only headers):
Ad,Headline 1,Headline 2,Description,Description line 1,Description line 2,Ad type,Ad state,Display URL,Path 1,Path 2,Custom parameter,Tracking template,Final URL,Mobile final URL,Device preference,Image Width,Image Height,Image Ad URL,Ad ID,Ad group ID,Campaign ID,Responsive Search Ad path 1,Responsive Search Ad path 2,Short headline,Long headline,Gmail ad marketing image headline,Gmail ad marketing image description,Impressions,Cost,Clicks
By the way this is the report in case 3, where I set includeZeroImpressions = true and includes the Impressions header. You can see in the last 3 fields, all of them are 0, which is expected.
Ad,Headline 1,Headline 2,Description,Description line 1,Description line 2,Ad type,Ad state,Display URL,Path 1,Path 2,Custom parameter,Tracking template,Final URL,Mobile final URL,Device preference,Image Width,Image Height,Image Ad URL,Ad ID,Ad group ID,Campaign ID,Responsive Search Ad path 1,Responsive Search Ad path 2,Short headline,Long headline,Gmail ad marketing image headline,Gmail ad marketing image description,Impressions,Cost,Clicks
,mpm-1340-head-line-1,mpm-1340-head-line-2,mpm-1340-desc-1,,,Expanded text ad,enabled,,p1,p2, --, --,"[""
https://www.powpow.com""]", --, --, --, --, --,378574373950,78915899202,
6455474065, --, --, --, --, --, --,0,0,0
Thank you,
Kain