getting Impression error message

18 views
Skip to first unread message

Web Wizard

unread,
Aug 7, 2019, 4:31:58 PM8/7/19
to Google Ads Scripts Forum
<?php 
/*************************************************
* Weekly Reporting
* @version: 3.4
***************************************************/

echo "heelo";
die();

var CC = ['willh...@gmail.com'];

var ONLY_ACTIVE = false;

var summaryHeader = ['Campaign Type','Clicks','Impr.','CTR','Avg. CPC ','Cost ',
                    'Avg. Pos.','Conversions','Click assisted conv.','Cost / conv. ',
                    'Conv. Rate','Total conv. value ','Click assisted conv. value','Conv. value / cost'];

 
var reportHeader = ['Campaign','Budget','Clicks','Impr.','CTR','Avg. CPC ','Cost ',
                    'Avg. Pos.','Conversions','Click assisted conv.','Cost / conv. ',
                    'Conv. Rate','Total conv. value ','Click assisted conv. value','Conv. value / cost'];

var shoppingReportHead = ['Product group','Clicks','Impressions','CTR','Avg. CPC',' Cost','Conversions',
                          'Cost / converted click','Conversion rate','Total conv. value','Conv. value / cost'];

var SEND_EMAIL = true;

function main() {
  
  var today = getAdWordsFormattedDate(0, 'MM-dd-yyyy');
  var spreadsheet = SpreadsheetApp.create(AdWordsApp.currentAccount().getName() + ': Account Report ' + today);
  Logger.log('Report Url: ' + spreadsheet.getUrl());
  try {
    spreadsheet.addEditors(TO);
    spreadsheet.addEditors(CC);
  } catch(e) {
    Logger.log(e);
  }  
  var reportSheet = spreadsheet.getSheets()[0];
  reportSheet.setName('Account Report');
  var shoppingSheet = spreadsheet.insertSheet('Google Shopping');
  var networkSheet = spreadsheet.insertSheet('Summary');
  
  compileNetworkReport(networkSheet); 
  compileAccountReport(reportSheet);  
  compileShoppingReport(shoppingSheet);  
  
  if(!SEND_EMAIL) { return; }
  
  var MSG = 'Hey,\n\nWeekly Account Report for you Adwords Account ('+AdWordsApp.currentAccount().getName()+') has been compiled at below url:\n'+spreadsheet.getUrl();
  var SUB = AdWordsApp.currentAccount().getName() + ': Weekly Account Report ' + today;
  
  
  if(CC.length) {
    MailApp.sendEmail(TO.join(','), SUB, MSG, {cc:CC.join(',') });
  } else {
    MailApp.sendEmail(TO.join(','), SUB, MSG, {cc:CC.join(',') });
  }
}

function compileShoppingReport(sheet){
  sheet.getRange(1,1,1,1).setValue('This lists all Product Groups from ALL Google Shopping Ad Groups.');
  sheet.getRange(1,1,1,shoppingReportHead.length).merge().setHorizontalAlignment('center').setBackground('#ffffcc').setFontWeight('bold').setFontSize(11);
  sheet.getRange(2,1,1,1).setValue('Google Shopping');
  sheet.getRange(2,1,1,shoppingReportHead.length).merge().setHorizontalAlignment('center').setFontColor('#1f497d').setFontWeight('bold').setFontSize(14);
  
  var row = sheet.getLastRow()+1;
  getShoppingStats(8, 2, sheet, row);
  
  var row = sheet.getLastRow()+2;
  getShoppingStats(15, 9, sheet, row);
  
  var row = sheet.getLastRow()+2;
  getShoppingStats(22, 16, sheet, row);
  
  var row = sheet.getLastRow()+2;
  getShoppingStats(29, 23, sheet, row);
  
  sheet.setFrozenRows(2);
  
  //Format Rows
  var numRows = sheet.getDataRange().getNumRows();  
  sheet.getRange(2, 2, numRows, 1).setNumberFormat("#,##0"); // Clicks
  sheet.getRange(2, 3, numRows, 1).setNumberFormat("#,##0"); // Impressions
  sheet.getRange(2, 4, numRows, 1).setNumberFormat("0.00%"); // Ctr 
  sheet.getRange(2, 5, numRows, 1).setNumberFormat("$#,##0.00"); // Cpc
  sheet.getRange(2, 6, numRows, 1).setNumberFormat("$#,##0.00"); // Cost
  sheet.getRange(2, 7, numRows, 1).setNumberFormat("#,##0"); // Conversions
  sheet.getRange(2, 8, numRows, 1).setNumberFormat("$#,##0.00"); // CPA
  sheet.getRange(2, 9, numRows, 1).setNumberFormat("0.00%"); //CR
  sheet.getRange(2, 10, numRows, 1).setNumberFormat("$#,##0.00"); // Conv Value
  sheet.getRange(2, 11, numRows, 1).setNumberFormat("#,##0.00"); // Conv val / Cost
  
  if((sheet.getMaxColumns() - sheet.getLastColumn()) > 0) {
    sheet.deleteColumns(sheet.getLastColumn()+1, sheet.getMaxColumns() - sheet.getLastColumn());
  }
  
  if((sheet.getMaxRows() - sheet.getLastRow()) > 0) {
    sheet.deleteRows(sheet.getLastRow()+1, sheet.getMaxRows() - sheet.getLastRow());
  }
  
  sheet.getDataRange().setFontFamily('Calibri');
  
}

function compileNetworkReport(reportSheet) {
  var today = getAdWordsFormattedDate(0, 'MM-dd-yyyy');
  reportSheet.getRange(2,1,1,1).setValue('AdWords Report '+today);
  reportSheet.getRange(2,1,1,reportHeader.length).merge().setHorizontalAlignment('center').setFontColor('#1f497d').setFontWeight('bold').setFontSize(14);
  reportSheet.getRange(3,1,1,reportHeader.length).merge();
  
  /** 30 Days **/
  reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Last 30').setFontColor('#741b47').setFontWeight('bold').setFontSize(12);
  reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
  var row = reportSheet.getLastRow()+1;
  getNetworkStats(31, 2, reportSheet, row);
  
  /** Prior 30 Days **/
  reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Prior 30').setFontColor('#741b47').setFontWeight('bold').setFontSize(12);
  reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
  var row = reportSheet.getLastRow()+1;
  getNetworkStats(61, 32, reportSheet, row);
  
  /*** Week over Week **/
  reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Week Over Week').setFontColor('#1f497d').setFontWeight('bold').setFontSize(12);
  reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
  
  var NUM_WEEKS = 52, START = 8, END = 2
  var row = reportSheet.getLastRow()+1;
  
  while(NUM_WEEKS > 0) {
    getNetworkStats(START, END, reportSheet, row);
    START+=7;
    END+=7;
    NUM_WEEKS--;
    row = reportSheet.getLastRow()+2;
  }
  
  reportSheet.setFrozenRows(2);
  
  //Format Rows
  var numRows = reportSheet.getDataRange().getNumRows(); 
  reportSheet.getRange(2, 2, numRows, 1).setNumberFormat("#,##0"); // Clicks
  reportSheet.getRange(2, 3, numRows, 1).setNumberFormat("#,##0"); // Impressions
  reportSheet.getRange(2, 4, numRows, 1).setNumberFormat("0.00%"); // Ctr 
  reportSheet.getRange(2, 5, numRows, 1).setNumberFormat("$#,##0.00"); // Cpc
  reportSheet.getRange(2, 6, numRows, 1).setNumberFormat("$#,##0.00"); // Cost
  reportSheet.getRange(2, 7, numRows, 1).setNumberFormat("#,##0.00"); // Avg Pos
  reportSheet.getRange(2, 8, numRows, 1).setNumberFormat("#,##0"); // Conversions
  reportSheet.getRange(2, 9, numRows, 1).setNumberFormat("#,##0"); // Clicks Asst Conversions  
  reportSheet.getRange(2, 10, numRows, 1).setNumberFormat("$#,##0.00"); // CPA
  reportSheet.getRange(2, 11, numRows, 1).setNumberFormat("0.00%"); //CR
  reportSheet.getRange(2, 12, numRows, 1).setNumberFormat("$#,##0.00"); // Conv Value
  reportSheet.getRange(2, 13, numRows, 1).setNumberFormat("$#,##0.00"); // Click Asst Conv Value
  reportSheet.getRange(2, 14, numRows, 1).setNumberFormat("#,##0.00"); // Conv val / Cost
  
  if((reportSheet.getMaxColumns() - reportSheet.getLastColumn()) > 0) {
    reportSheet.deleteColumns(reportSheet.getLastColumn()+1, reportSheet.getMaxColumns() - reportSheet.getLastColumn());
  }
  
  if((reportSheet.getMaxRows() - reportSheet.getLastRow()) > 0) {
    reportSheet.deleteRows(reportSheet.getLastRow()+1, reportSheet.getMaxRows() - reportSheet.getLastRow());
  }
  
  reportSheet.getDataRange().setFontFamily('Calibri');
}

function compileAccountReport(reportSheet) {
  var today = getAdWordsFormattedDate(0, 'MM-dd-yyyy');
  reportSheet.getRange(2,1,1,1).setValue('AdWords Report '+today);
  reportSheet.getRange(2,1,1,reportHeader.length).merge().setHorizontalAlignment('center').setFontColor('#1f497d').setFontWeight('bold').setFontSize(14);
  reportSheet.getRange(3,1,1,reportHeader.length).merge();
  
  /** 30 Days **/
  reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Last 30').setFontColor('#741b47').setFontWeight('bold').setFontSize(12);
  reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
  var row = reportSheet.getLastRow()+1;
  getCampaignStats(31, 2, reportSheet, row);
  
  /** Prior 30 Days **/
  reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Prior 30').setFontColor('#741b47').setFontWeight('bold').setFontSize(12);
  reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
  var row = reportSheet.getLastRow()+1;
  getCampaignStats(61, 32, reportSheet, row);
  
  /*** Week over Week **/
  reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Week Over Week').setFontColor('#1f497d').setFontWeight('bold').setFontSize(12);
  reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
  
  var NUM_WEEKS = 52, START = 8, END = 2
  var row = reportSheet.getLastRow()+1;
  while(NUM_WEEKS > 0) {
    getCampaignStats(START, END, reportSheet, row);
    START+=7;
    END+=7;
    NUM_WEEKS--;
    row = reportSheet.getLastRow()+2;
  }
  
  reportSheet.setFrozenRows(2);
  
  //Format Rows
  var numRows = reportSheet.getDataRange().getNumRows();  
  reportSheet.getRange(2, 2, numRows, 1).setNumberFormat("$#,##0.00"); // Budget
  reportSheet.getRange(2, 3, numRows, 1).setNumberFormat("#,##0"); // Clicks
  reportSheet.getRange(2, 4, numRows, 1).setNumberFormat("#,##0"); // Impressions
  reportSheet.getRange(2, 5, numRows, 1).setNumberFormat("0.00%"); // Ctr 
  reportSheet.getRange(2, 6, numRows, 1).setNumberFormat("$#,##0.00"); // Cpc
  reportSheet.getRange(2, 7, numRows, 1).setNumberFormat("$#,##0.00"); // Cost
  reportSheet.getRange(2, 8, numRows, 1).setNumberFormat("#,##0.00"); // Avg Pos
  reportSheet.getRange(2, 9, numRows, 1).setNumberFormat("#,##0"); // Conversions
  reportSheet.getRange(2, 10, numRows, 1).setNumberFormat("#,##0"); // Clicks Asst Conversions  
  reportSheet.getRange(2, 11, numRows, 1).setNumberFormat("$#,##0.00"); // CPA
  reportSheet.getRange(2, 12, numRows, 1).setNumberFormat("0.00%"); //CR
  reportSheet.getRange(2, 13, numRows, 1).setNumberFormat("$#,##0.00"); // Conv Value
  reportSheet.getRange(2, 14, numRows, 1).setNumberFormat("$#,##0.00"); // Click Asst Conv Value
  reportSheet.getRange(2, 15, numRows, 1).setNumberFormat("#,##0.00"); // Conv val / Cost
  
  if((reportSheet.getMaxColumns() - reportSheet.getLastColumn()) > 0) {
    reportSheet.deleteColumns(reportSheet.getLastColumn()+1, reportSheet.getMaxColumns() - reportSheet.getLastColumn());
  }
  
  if((reportSheet.getMaxRows() - reportSheet.getLastRow()) > 0) {
    reportSheet.deleteRows(reportSheet.getLastRow()+1, reportSheet.getMaxRows() - reportSheet.getLastRow());
  }
  
  reportSheet.getDataRange().setFontFamily('Calibri');
}


function getShoppingStats(start, end, sheet, rowNum) {
  
  var TO = getAdWordsFormattedDate(end, 'yyyyMMdd');
  var FROM = getAdWordsFormattedDate(start, 'yyyyMMdd');
  
  var formattedTO = getAdWordsFormattedDate(end, 'MMM dd, yyyy');
  var formattedFROM = getAdWordsFormattedDate(start, 'MMM dd, yyyy');
  
  var dateHead = formattedFROM + ' - ' + formattedTO;
  
  var dateRow = [dateHead];
  while(dateRow.length != shoppingReportHead.length) {
    dateRow.push('');
  }
  
  var OUTPUT = [dateRow,shoppingReportHead];
  var OPTIONS = { includeZeroImpressions : false };
  var cols = ['CustomAttribute1','Clicks','Impressions','Ctr','AverageCpc','Cost','Conversions',
              'CostPerConversion','ConversionRate','ConversionValue'];
  var report = 'SHOPPING_PERFORMANCE_REPORT';
  var query = ['select',cols.join(','),'from',report,
               'during',FROM + ',' + TO].join(' ');
  
  var reportIter = AdWordsApp.report(query, OPTIONS).rows();
  while(reportIter.hasNext()){
    var row = reportIter.next();
    var row_array = [];
    for(var k in cols) {
      row_array.push(row[cols[k]]);
    }
    
    var convValPerCost = (row.Cost == 0) ? 0 : (parseFloat(row.ConversionValue.toString().replace(/,/g, '')) / parseFloat(row.Cost.toString().replace(/,/g, '')));
    row_array.push(convValPerCost);
    OUTPUT.push(row_array);
  }
  
  var totals = ['Total'];
  while(totals.length != shoppingReportHead.length) {
    totals.push(0);
  }
  
  OUTPUT.push(totals);
  
  sheet.getRange(rowNum, 1, OUTPUT.length, OUTPUT[0].length).setValues(OUTPUT).setFontSize(10);
  sheet.getRange(rowNum, 1, 1, OUTPUT[0].length).merge().setFontColor('#ffffff').setBackground('#4f81bd');
  sheet.getRange(rowNum, 1, 2, OUTPUT[0].length).setFontSize(11);
  sheet.getRange(rowNum+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setBackground('#dbe5f1');  
  var numRows = OUTPUT.length-3;
  if(numRows < 1) { numRows = 1; }
  sheet.getRange(rowNum+2, 1, numRows, OUTPUT[0].length).sort([{column: 7, ascending: false}, {column: 6, ascending: true}]);
  
  var r = sheet.getLastRow();
  var e = r-1;
  var s = rowNum + 2;
  var formulas = [['=SUM(B'+s+':B'+e+')', '=SUM(C'+s+':C'+e+')', '=B'+r+'/C'+r, '=F'+r+'/B'+r, '=SUM(F'+s+':F'+e+')',
                   '=SUM(G'+s+':G'+e+')', '=F'+r+'/G'+r, '=G'+r+'/B'+r, '=SUM(J'+s+':J'+e+')', '=J'+r+'/F'+r]];
  sheet.getRange(r, 2, 1, formulas[0].length).setFormulas(formulas);
  sheet.getRange(r, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('bold').setFontSize(11).setBorder(true,false,true,false,false,false);
  sheet.getRange(r+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('normal');  
  sheet.setColumnWidth(1, 300);
  sheet.setColumnWidth(2, 52);
  sheet.setColumnWidth(3, 80);
  sheet.setColumnWidth(4, 45);
  sheet.setColumnWidth(5, 62);
  sheet.setColumnWidth(6, 72);
  sheet.setColumnWidth(7, 82);
  sheet.setColumnWidth(8, 150);
  sheet.setColumnWidth(9, 110);
  sheet.setColumnWidth(10, 115);
  sheet.setColumnWidth(11, 122);  
}

function getCampaignStats(start, end, reportSheet, rowNum) {
  
  var TO = getAdWordsFormattedDate(end, 'yyyyMMdd');
  var FROM = getAdWordsFormattedDate(start, 'yyyyMMdd');
  
  var formattedTO = getAdWordsFormattedDate(end, 'MMM dd, yyyy');
  var formattedFROM = getAdWordsFormattedDate(start, 'MMM dd, yyyy');
  
  var dateHead = formattedFROM + ' - ' + formattedTO;
  
  var dateRow = [dateHead];
  while(dateRow.length != reportHeader.length) {
    dateRow.push('');
  }
  
  var OUTPUT = [dateRow,reportHeader];
  var OPTIONS = { includeZeroImpressions : true };
  var cols = ['CampaignName','Amount','Clicks','Impressions','Ctr','AverageCpc','Cost',
              'AveragePosition','Conversions','ClickAssistedConversions','CostPerConversion',
              'ConversionRate','ConversionValue','ClickAssistedConversionValue'];
  var report = 'CAMPAIGN_PERFORMANCE_REPORT';
  var query = ['select',cols.join(','),'from',report,
               ONLY_ACTIVE ? 'where CampaignStatus = ENABLED and Clicks > 0' : 'where Clicks > 0',
               'during',FROM + ',' + TO].join(' ');
  
  var reportIter = AdWordsApp.report(query, OPTIONS).rows();
  while(reportIter.hasNext()){
    var row = reportIter.next();
    var row_array = [];
    for(var k in cols) {
      row_array.push(row[cols[k]]);
    }
    
    var convValPerCost = (row.Cost == 0) ? 0 : (parseFloat(row.ConversionValue.toString().replace(/,/g, '')) / parseFloat(row.Cost.toString().replace(/,/g, '')));
    row_array.push(convValPerCost);
    OUTPUT.push(row_array);
  }
  
  var totals = ['Total'];
  while(totals.length != reportHeader.length) {
    totals.push(0);
  }
  
  OUTPUT.push(totals);
  
  reportSheet.getRange(rowNum, 1, OUTPUT.length, OUTPUT[0].length).setValues(OUTPUT).setFontSize(10);
  reportSheet.getRange(rowNum, 1, 1, OUTPUT[0].length).merge().setFontColor('#ffffff').setBackground('#4f81bd');
  reportSheet.getRange(rowNum, 1, 2, OUTPUT[0].length).setFontSize(11);
  reportSheet.getRange(rowNum+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setBackground('#dbe5f1');
  reportSheet.getRange(rowNum+2, 1, OUTPUT.length-3, OUTPUT[0].length).sort([{column: 9, ascending: false}, {column: 7, ascending: true}]);
  
  var r = reportSheet.getLastRow();
  var e = r-1;
  var s = rowNum + 2;
  var formulas = [['=SUM(B'+s+':B'+e+')', '=SUM(C'+s+':C'+e+')', '=SUM(D'+s+':D'+e+')', 
                  '=C'+r+'/D'+r, '=G'+r+'/C'+r, '=SUM(G'+s+':G'+e+')',
                   '=AVERAGE(H'+s+':H'+e+')', '=SUM(I'+s+':I'+e+')', '=SUM(J'+s+':J'+e+')', 
                   '=G'+r+'/I'+r, '=I'+r+'/C'+r, '=SUM(M'+s+':M'+e+')', 
                   '=SUM(N'+s+':N'+e+')', '=M'+r+'/G'+r]];
                   
  reportSheet.getRange(r, 2, 1, formulas[0].length).setFormulas(formulas);
  reportSheet.getRange(r, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('bold').setFontSize(11).setBorder(true,false,true,false,false,false);
  reportSheet.getRange(r+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('normal');
  reportSheet.setColumnWidth(1, 300);
  reportSheet.setColumnWidth(2, 80);
  reportSheet.setColumnWidth(3, 60);
  reportSheet.setColumnWidth(4, 80);
  reportSheet.setColumnWidth(5, 62);
  reportSheet.setColumnWidth(6, 70);
  reportSheet.setColumnWidth(7, 90);
  reportSheet.setColumnWidth(8, 65);
  reportSheet.setColumnWidth(9, 85);
  reportSheet.setColumnWidth(10, 135);
  reportSheet.setColumnWidth(11, 90);
  reportSheet.setColumnWidth(12, 80);
  reportSheet.setColumnWidth(13, 122);
  reportSheet.setColumnWidth(14, 170);
  reportSheet.setColumnWidth(15, 122);
  
}


function getNetworkStats(start, end, reportSheet, rowNum) {
  
  var shoppingMap = {};
  var iter = AdWordsApp.shoppingCampaigns().get();
  while(iter.hasNext()) {
    shoppingMap[iter.next().getId()] = 1;
  }
  
  
  var TO = getAdWordsFormattedDate(end, 'yyyyMMdd');
  var FROM = getAdWordsFormattedDate(start, 'yyyyMMdd');
  
  var formattedTO = getAdWordsFormattedDate(end, 'MMM dd, yyyy');
  var formattedFROM = getAdWordsFormattedDate(start, 'MMM dd, yyyy');
  
  var dateHead = formattedFROM + ' - ' + formattedTO;
  
  var dateRow = [dateHead];
  while(dateRow.length != summaryHeader.length) {
    dateRow.push('');
  }
  
  var OUTPUT = [dateRow,summaryHeader];
  
  
  var initMap = {
    'Clicks': 0,'Impressions': 0, 'Cost': 0, 'AveragePosition': 0, 'Conversions': 0,
    'ClickAssistedConversions': 0, 'ConversionValue': 0,'ClickAssistedConversionValue': 0
  }
  
  var map = {
    'Search Network': JSON.parse(JSON.stringify(initMap)),
    'Display Network': JSON.parse(JSON.stringify(initMap)),
    'Shopping Network': JSON.parse(JSON.stringify(initMap))
  };
  var OPTIONS = { includeZeroImpressions : false };
  var cols = ['AdNetworkType1', 'CampaignId','Clicks','Impressions','Cost',
              'AveragePosition','Conversions','ClickAssistedConversions',
              'ConversionValue','ClickAssistedConversionValue'];
  var report = 'CAMPAIGN_PERFORMANCE_REPORT';
  var query = ['select',cols.join(','),'from',report,
               ONLY_ACTIVE ? 'where CampaignStatus = ENABLED' : '',
               'during',FROM + ',' + TO].join(' ');
  
  var reportIter = AdWordsApp.report(query, OPTIONS).rows();
  while(reportIter.hasNext()){
    var row = reportIter.next();
    
    if(shoppingMap[row.CampaignId]) {
      row.AdNetworkType1 = 'Shopping Network';
    }
    
    map[row.AdNetworkType1].Impressions += parseInt(row.Impressions, 10);
    map[row.AdNetworkType1].Clicks += parseInt(row.Clicks, 10);
    map[row.AdNetworkType1].Conversions += parseInt(row.Conversions.toString().replace(/,/g,''), 10);
    map[row.AdNetworkType1].ClickAssistedConversions += parseInt(row.ClickAssistedConversions.toString().replace(/,/g,''), 10);
    map[row.AdNetworkType1].Cost += parseFloat(row.Cost.toString().replace(/,/g,''));
    map[row.AdNetworkType1].ConversionValue += parseFloat(row.ConversionValue.toString().replace(/,/g,''));    
    map[row.AdNetworkType1].ClickAssistedConversionValue += parseFloat(row.ClickAssistedConversionValue.toString().replace(/,/g,''));    
    map[row.AdNetworkType1].AveragePosition += parseFloat(row.AveragePosition)*parseInt(row.Impressions, 10);    
  }
  
  
  var cols = ['Clicks','Impressions','Ctr','AverageCpc','Cost',
              'AveragePosition','Conversions','ClickAssistedConversions','CostPerConversion',
              'ConversionRate','ConversionValue','ClickAssistedConversionValue'];
  for(var network in map) { 
    var row = map[network]; 
    var row_array = [network];
    
    row.Ctr = row.Impressions == 0 ? 0 : round(100*(row.Clicks/row.Impressions),2)+'%';
    row.ConversionRate = row.Clicks == 0 ? 0 : round(100*(row.Conversions/row.Clicks),2)+'%';
    row.AveragePosition = row.Impressions == 0 ? 0 : round((row.AveragePosition/row.Impressions),1);
    row.AverageCpc = row.Clicks == 0 ? 0 : round((row.Cost/row.Clicks),2);
    row.CostPerConversion = row.Conversions == 0 ? 0 : round((row.Cost/row.Conversions),2);
    
    //Logger.log(JSON.stringify(row))
    for(var k in cols) {
      row_array.push(row[cols[k]]);
    }
    
    var convValPerCost = (row.Cost == 0) ? 0 : round(row.ConversionValue/ row.Cost, 2);
    row_array.push(convValPerCost);
    OUTPUT.push(row_array);
  }
  
  var totals = ['Total'];
  while(totals.length != summaryHeader.length) {
    totals.push(0);
  }
  
  OUTPUT.push(totals);
  
  reportSheet.getRange(rowNum, 1, OUTPUT.length, OUTPUT[0].length).setValues(OUTPUT).setFontSize(10);
  reportSheet.getRange(rowNum, 1, 1, OUTPUT[0].length).merge().setFontColor('#ffffff').setBackground('#4f81bd');
  reportSheet.getRange(rowNum, 1, 2, OUTPUT[0].length).setFontSize(11);
  reportSheet.getRange(rowNum+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setBackground('#dbe5f1');
  reportSheet.getRange(rowNum+2, 1, OUTPUT.length-3, OUTPUT[0].length).sort([{column: 8, ascending: false}, {column: 6, ascending: true}]);
  
  var r = reportSheet.getLastRow();
  var e = r-1;
  var s = rowNum + 2;
  var formulas = [['=SUM(B'+s+':B'+e+')', '=SUM(C'+s+':C'+e+')', 
                  '=B'+r+'/C'+r, '=F'+r+'/B'+r, '=SUM(F'+s+':F'+e+')',
                   '=AVERAGE(G'+s+':G'+e+')', '=SUM(H'+s+':H'+e+')', '=SUM(K'+s+':K'+e+')', 
                   '=F'+r+'/H'+r, '=H'+r+'/B'+r, '=SUM(L'+s+':L'+e+')', 
                   '=SUM(M'+s+':M'+e+')', '=L'+r+'/F'+r]];
                   
  reportSheet.getRange(r, 2, 1, formulas[0].length).setFormulas(formulas);
  reportSheet.getRange(r, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('bold').setFontSize(11).setBorder(true,false,true,false,false,false);
  reportSheet.getRange(r+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('normal');
  reportSheet.setColumnWidth(1, 300);
  reportSheet.setColumnWidth(2, 60);
  reportSheet.setColumnWidth(3, 80);
  reportSheet.setColumnWidth(4, 62);
  reportSheet.setColumnWidth(5, 70);
  reportSheet.setColumnWidth(6, 90);
  reportSheet.setColumnWidth(7, 65);
  reportSheet.setColumnWidth(8, 85);
  reportSheet.setColumnWidth(9, 135);
  reportSheet.setColumnWidth(10, 90);
  reportSheet.setColumnWidth(11, 80);
  reportSheet.setColumnWidth(12, 122);
  reportSheet.setColumnWidth(13, 170);
  reportSheet.setColumnWidth(14, 122);
  
}

/**
* Get AdWords Formatted date for n days back
* @param {int} d - Numer of days to go back for start/end date
* @return {String} - Formatted date yyyyMMdd
**/
function getAdWordsFormattedDate(d, format){
  var date = new Date();
  date.setDate(date.getDate() - d);
  return Utilities.formatDate(date,AdWordsApp.currentAccount().getTimeZone(),format);
}

function log(msg) {
  var time = Utilities.formatDate(new Date(),
                                  AdWordsApp.currentAccount().getTimeZone(),
                                  'yyyy-MM-dd HH:mm:ss.SSS');
  Logger.log(time + ' - ' + msg);
}

function round(num,n) {    
  return +(Math.round(num + "e+"+n)  + "e-"+n);
}
?>
Reply all
Reply to author
Forward
0 new messages