Google 앱 스크립트를 사용하여 Google 애널리틱스에서 가져온 데이터를 수정하려면 어떻게해야합니까?

Abhay

Google Apps 스크립트를 사용하여 Google 애널리틱스에서 데이터를 가져와 Google 시트의 보고서에 넣습니다. 이 특정 보고서의 경우 가져온 데이터가 매우 커서 Google 시트에 넣기 전에 수정하고 싶습니다. javascript / google apps script를 사용하여 어떻게 할 수 있는지 알아 내려면 귀하의 도움이 필요합니다.

이것은 내 현재 코드입니다.

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 시트에 붙여 넣기 전에이 데이터를 압축해야합니다. 이상적으로는 두 가지를 수행하고 싶습니다.

  1. 방문 페이지 값을 기반으로 '웹 섹션'이라는 새 열을 만듭니다. 예를 들어 방문 페이지에 'One'이 포함 된 경우 새 열의 값은 'Location One'이어야합니다. 방문 페이지에 'Two'가 포함 된 경우 값은 'Location Two'여야합니다. 값을 지정하지 않으면 모든 데이터가 '기타'에 속해야합니다.
  2. 데이터를 '웹 섹션'및 '날짜'열로 그룹화하고 세션 합계를 표시하도록 데이터를 그룹화합니다.

이를 바탕으로 다음과 같은 새 테이블을 가져와야합니다.

Web Section      Date    Sessions
Location One   20191228     20
Location Two   20191228      1
Others         20191228    100

저를 도와 주셔서 감사합니다!

Tanaike
  • 다음 상황을 달성하고자합니다.

    • 에서

      [["/",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합니다.

    • 날짜가 다른 경우 날짜를 구분하고 싶습니다.
  • Google Apps Script를 사용하여이 작업을 수행하려고합니다.

내 이해가 맞다면이 답변은 어떻습니까? 이것은 몇 가지 가능한 답변 중 하나에 불과하다고 생각하십시오.

흐름:

이 수정 된 스크립트의 흐름은 다음과 같습니다.

  1. report같이 값을 검색합니다 Analytics.Data.Ga.get().
  2. 개체를 만듭니다. "세션"을 계산하는 데 사용됩니다.
  3. 배열을 만듭니다. 스프레드 시트에 넣는 데 사용됩니다.
  4. 스프레드 시트에 배열을 넣습니다.

수정 된 스크립트 :

스크립트를 수정하면 다음과 같이됩니다.

에서:
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. 따라서이 수정 된 스크립트에서 처음에는 이것을 설정하십시오.
  • 안타깝게도 20191228100of ["/",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.
  • 위의 경우, 값과 검색 OneTwo의 이름을 사용 First Output하고 Second Output각각.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관