Event Category Monitor Using Google AppScript and Sheet
1–2 minutes
End Result
Code
// updated: 8/08/2022
function list_event_categories_drop_off() {
var tableId = 'ga:2415606'; // from Query Explorer, the number is the profile id
var metrics = ['ga:totalEvents'];
var options = {
'dimensions': 'ga:eventCategory',
//'filters':'',
'sort': '-ga:eventCategory',
//'segment': '',
'samplingLevel': 'HIGHER_PRECISION'
//'max-results':'5'
}
//get tag names
//tags = getTagsListFromGA(tableId, metrics, options, anchorStartDate, anchorEndDate);
//tags = getTagsListFromGTM("accounts/364874/containers/31314328/workspaces/861");
var truthStartDate='2022-04-25';
var truthEndDate='2022-05-01';
var days = 7; //to later get the average number of ec event count instead
truthDateData = gaGet(tableId, truthStartDate, truthEndDate, metrics, options);
truthDateData = truthDateData.rows;
//set up the object
var eventsStatusData={};
for(var i=0;i<truthDateData.length;i++){
//var ob={[tags[i]]:[]};
var num = truthDateData[i][1];
num = +num; //convert string to integer
eventsStatusData[truthDateData[i][0]]=[];
eventsStatusData[truthDateData[i][0]].push(num/7);
}
yesterdayData = gaGet(tableId, "yesterday", "yesterday", metrics, options);
yesterdayData = yesterdayData.rows;
var currentLength=1;
for(var i=0;i<yesterdayData.length;i++){
//var ob={[tags[i]]:[]};
if(eventsStatusData[yesterdayData[i][0]]){ //if ec appears yesterday and also on truthDate (!0 & !0, !0 & 0)
eventsStatusData[yesterdayData[i][0]].push(yesterdayData[i][1]);
currentLength = eventsStatusData[yesterdayData[i][0]].length;
}else{ // if ec appears yesterday but not on truthDate => new event category
eventsStatusData[yesterdayData[i][0]] =[];
eventsStatusData[yesterdayData[i][0]].push(0);
eventsStatusData[yesterdayData[i][0]].push(yesterdayData[i][1]);
}
}
// if ec did not appear yesterday but appeared on truthDate => ec drop off
for(var key in eventsStatusData){
//eventsStatusData.forEach(tagStatusData => {
while(eventsStatusData[key].length < currentLength){
eventsStatusData[key].push(0);
}
};
var threshold = 0.2;
for (let key in eventsStatusData) {
if(eventsStatusData[key][0]>0){
var change = eventsStatusData[key][1]/eventsStatusData[key][0]-1;
eventsStatusData[key].push(change);
}else if(eventsStatusData[key][0]==0 && eventsStatusData[key][1]>0){
eventsStatusData[key].push("new");
}
var status = "";
if(eventsStatusData[key][2]>threshold){
status="spike";
}else if(eventsStatusData[key][2] == "-1"){
status= "dead";
}else if(eventsStatusData[key][2]<(-1*threshold)){
status="drop off";
}else if(eventsStatusData[key][2] == "new"){
status= "n/a";
}else{
status="ok";
}
eventsStatusData[key].push(status);
}
//convert tagsStatusData to 2 dimensional array
twoDTagsData=Object.keys(eventsStatusData).map((key)=>[key,...eventsStatusData[key]]);
var headerData = [["Event Category"]];
headerData[0].push("ws " + truthStartDate);
headerData[0].push("yesterday");
headerData[0].push("% change");
headerData[0].push("EC health");
//** WRITE VALUES TO SHEET */
writeToSheet("ga_event_category_monitor", headerData, twoDTagsData);
}