[英]Google Apps Script: How do I pull data entered today from one spreadsheet and transpose it to another?
[英]How do i use google apps script to modify data that i pull from google analytics?
我正在使用谷歌应用程序脚本从谷歌分析中提取数据并将其放入谷歌表格的报告中。 对于这个具体的报告,拉取的数据非常大,想在放到google sheet之前修改一下。 我需要你的帮助来弄清楚如何使用 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]]
这将创建一个看起来像这样的谷歌表:
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
谢谢你帮我解决这个问题!
您要实现以下情况。
从
[["/",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
。
如果我的理解是正确的,这个答案怎么样? 请将此视为几种可能的答案之一。
这个修改后的脚本的流程如下。
Analytics.Data.Ga.get()
将值检索为report
。当你的脚本被修改时,它变成如下。
从: 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(/^[az]/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(/^[az]/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
和["/",20191228,100]
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);
searchValues
对应search
索引和name
索引。One
和Two
搜索的值分别使用First Output
和Second Output
的名称。对您的范围不太确定(如果您只打算做 4 个 LP 或者如果有 n 个 LP),但更简单的方法是在 GA 上为您想要提取的 LP 创建细分。 然后创建一个带有 GA 加载项的 Google Sheet,从这些段中提取数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.