我正在使用Google Apps脚本从Google Analytics(分析)中提取数据,并将其放入Google表格中的报告中。对于此特定报告,提取的数据非常大,我想对其进行修改,然后再将其放入Google工作表中。我需要您的帮助,以找出如何使用javascript / google apps脚本来完成此任务。
这是我当前的代码:
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
但是,我的网站上有很多登录页面,因此我需要先精简此数据,然后再将其粘贴到Google工作表中。理想情况下,我想做两件事:
基于此,我应该得到一个新表,如下所示:
Web Section Date Sessions
Location One 20191228 20
Location Two 20191228 1
Others 20191228 100
谢谢您帮助我解决这个问题!
答案 0 :(得分:0)
您要实现以下情况。
来自
[["/",20191228,100],["/locationOne",20191228,10],["/locationTwo",20191228,1],["/locationOne?s=a",20191228,10],["/locationOne",20191229,10]]
收件人
Web Section Date Sessions
Location One 20191228 20
Location One 20191229 10
Location Two 20191228 1
Others 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
和["/",20191228,100]
是数字还是字符串。因此,我在修改后的脚本中使用了Number(e[2])
。array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});
。如果我误解了你的问题,而这不是你想要的方向,我深表歉意。那时,您可以提供更多的样本值和期望的输出吗?由此,我想确认一下。
答案 1 :(得分:0)
不太确定您的范围(如果您仅打算做4个LP或有n个LP),但是一种更简单的方法是在GA上为要提取的LP创建段。然后创建带有Google Analytics(分析)加载项的Google表格,从这些细分中提取数据。