我正在使用谷歌应用程序脚本从谷歌分析中提取数据,并将其放入谷歌表格中的报告中。对于这份具体的报告,数据是非常大的,我想修改它,然后我把它放在谷歌的表格中。我需要你的帮助,找出如何使用javascript/google应用程序脚本来完成这个任务。
这是我目前的代码:
function testReport() {
  var profileId = XXXXXXX;
  var tableId = 'ga:' + profileId;
  var startDate = 'yesterday';
  var endDate = 'yesterday';  
  var metrics = 'ga:sessions';
  var optionalArgs = {  
    'dimensions': 'ga:landingPagePath, ga:date',
    'filters': 'ga:sessions>0',
  };
  var report = Analytics.Data.Ga.get(tableId, startDate, endDate, metrics, optionalArgs);
  if (report.rows) {
    var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/FILLER_TEXT/edit#gid=0');
    var sheet = spreadsheet.getSheetByName('Data'); 
    var firstEmptyRow = sheet.getLastRow() + 1;
    sheet.getRange(firstEmptyRow,1, report.rows.length, report.rows[0].length).setValues(report.rows);
  }
}report.rows是一个采用这种格式的对象:
[[/,20191228,100],[/locationOne,20191228,10],[/locationTwo,20191228,1],[/locationOne?s=a,20191228,10]]这将创建一个如下所示的google工作表:
Landing Page        Date    Sessions
/                 20191228    100
/locationOne      20191228     10
/locationTwo      20191228      1
/locationOne?s=a  20191228     10然而,在我的网站上有很多登陆页面,所以我需要压缩这些数据,然后再粘贴到谷歌页面中。理想情况下,我想做两件事:
基于此,我应该得到一个新的表,如下所示:
Web Section      Date    Sessions
Location One   20191228     20
Location Two   20191228      1
Others         20191228    100谢谢你帮我解决这个问题!
发布于 2019-12-30 01:13:11
- From["/",20191228,100,"/locationOne",20191228,10,"/locationTwo",20191228,1,/locationOne?s=a,20191228,10,"/locationOne",20191229,10]
-至
网页部分日期会议地点一20191228 20地点一20191229 10地点二20191228 1其他20191228 100
-你想把location修改成Location。
-如果日期不同,请将日期分开。
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一。
流动:
此修改脚本的流程如下所示。
report的形式使用Analytics.Data.Ga.get()检索值。修改脚本:
当您的脚本被修改时,如下所示。
发自:
var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/FILLER_TEXT/edit#gid=0');
var sheet = spreadsheet.getSheetByName('Data'); 
var firstEmptyRow = sheet.getLastRow() + 1;
sheet.getRange(firstEmptyRow,1, report.rows.length, report.rows[0].length).setValues(report.rows);至:
// Please set the key words for using as "Web Section".
var searchValues = ["One", "Two"];
// Create object.
var object = report.rows.reduce(function(o, e) {
  var idx = -1;
  var check = searchValues.some(function(f, j) {
    if (e[0].indexOf(f) != -1) {
      idx = j;
      return true;
    }
    return false;
  });
  if (check) {
    var s = searchValues[idx];
    var key = e[0].replace(/\//g, "").split(s).shift().replace(/^[a-z]/g, function(f) {return f.toUpperCase()}) + " " + s +  "_" + e[1];
    o[key] = key in o ? o[key] + Number(e[2]) : Number(e[2]);
  } else {
    var others = "Others_" + e[1];
    o[others] = others in o ? o[others] + Number(e[2]) : Number(e[2]);
  }
  return o;
}, {});
// Create array.
var array = Object.keys(object).map(function(e) {return e.split("_").concat(object[e])});
array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});
// Put array to Spreadsheet.
var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/FILLER_TEXT/edit#gid=0');
var sheet = spreadsheet.getSheetByName('Data'); 
var firstEmptyRow = sheet.getLastRow() + 1;
sheet.getRange(firstEmptyRow,1, array.length, array[0].length).setValues(array);用于检查脚本:
var report = {rows: [["/",20191228,100],["/locationOne",20191228,10],["/locationTwo",20191228,1],["/locationOne?s=a",20191228,10],["/locationOne",20191229,10]]};
// Please set the key words for using as "Web Section".
var searchValues = ["One", "Two"];
// Create object.
var object = report.rows.reduce(function(o, e) {
  var idx = -1;
  var check = searchValues.some(function(f, j) {
    if (e[0].indexOf(f) != -1) {
      idx = j;
      return true;
    }
    return false;
  });
  if (check) {
    var s = searchValues[idx];
    var key = e[0].replace(/\//g, "").split(s).shift().replace(/^[a-z]/g, function(f) {return f.toUpperCase()}) + " " + s +  "_" + e[1];
    o[key] = key in o ? o[key] + Number(e[2]) : Number(e[2]);
  } else {
    var others = "Others_" + e[1];
    o[others] = others in o ? o[others] + Number(e[2]) : Number(e[2]);
  }
  return o;
}, {});
// Create array.
var array = Object.keys(object).map(function(e) {return e.split("_").concat(object[e])});
array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});
	
console.log(array);
注意:
var searchValues = ["One", "Two"];。因为我不确定locationOne,locationTwo的模式。所以在这个修改的脚本中,首先,请设置这个。20191228和100 of ["/",20191228,100]是数字还是字符串。所以我在修改后的脚本中使用了Number(e[2])。array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});。参考文献:
如果我误解了你的问题,而这不是你想要的方向,我道歉。此时,您能提供更多的示例值和预期的输出吗?通过这个,我想确认一下。
添加:
One、Two作为搜索值。First Output,Second Output作为用于放置电子表格的名称。关于你的补充问题,我可以像上面这样理解。如果我的理解是正确的,那么下面的示例脚本如何?
// Please set the key words and names for using as "Web Section".
var searchValues = {
  search: ["One", "Two"],
  name:   ["First Output", "Second Output"]
};
// Create object.
var object = report.rows.reduce(function(o, e) {
  var idx = -1;
  var check = searchValues.search.some(function(f, j) {
    if (e[0].indexOf(f) != -1) {
      idx = j;
      return true;
    }
    return false;
  });
  if (check) {
    var key = searchValues.name[idx] +  "_" + e[1];
    o[key] = key in o ? o[key] + Number(e[2]) : Number(e[2]);
  } else {
    var others = "Others_" + e[1];
    o[others] = others in o ? o[others] + Number(e[2]) : Number(e[2]);
  }
  return o;
}, {});
// Create array.
var array = Object.keys(object).map(function(e) {return e.split("_").concat(object[e])});
array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});
// Put array to Spreadsheet.
var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/FILLER_TEXT/edit#gid=0');
var sheet = spreadsheet.getSheetByName('Data'); 
var firstEmptyRow = sheet.getLastRow() + 1;
sheet.getRange(firstEmptyRow,1, array.length, array[0].length).setValues(array);search的索引和name的索引对应到searchValues中。One和Two搜索的值分别使用First Output和Second Output的名称。发布于 2019-12-30 17:36:03
不太确定你的范围(如果你只计划做4个LP或如果有n个LP),但是一个更简单的方法是在GA上为你想要拉的LP创建段。然后创建一个带有GA外接程序的Google工作表,从这些片段中提取数据。
https://stackoverflow.com/questions/59518226
复制相似问题