How to track an event that is defined using multiple variables? - google-analytics

An app that lists events relative to user location, e.g. If user opens the app in Paris, France, it will say that there is Bolshoi Ballet event that is playing today 12:00. When user clicks on the showtime, he is taken to an external website that handles booking.
I am interested in two events:
User clicked on the event:
Event name (in this example [ite], "screening-view").
event variable associated with the screening (ite., "Bolshoi Ballet").
date variable associated with the screening.
time variable associated with the screening (ite., 12:00).
location (country) variable associated with the screening (ite., Paris).
vendor variable associated with the screening (ite., whatever external website handles booking).
User viewed event:
Event name (in this example [ite], "screening-book").
event variable associated with the screening (ite., "Bolshoi Ballet").
date variable associated with the screening.
time variable associated with the screening (ite., 12:00).
location (country) variable associated with the screening (ite., Paris).
vendor variable associated with the screening (ite., whatever external website handles booking).
I have looked into different options how to approach this requirement and the closest that I can see is using analytics.js events. However, it allows to register only one value (number) associated with the event:
ga('send', 'event', 'category', 'action', 'label', value);
From what I can tell, this cannot be used to visualise events (e.g. how many events have been viewed today) and analyse data (e.g. how many events have been "booked" where event is "Bolshoi Ballet" and country is "France").
Note, all variables (including country) are associated with event in this example, not derived values (e.g. not user country based on their IP).

Actually the event allows you to associate four values, since category, action and label can and should be utilized, too.
For anything else you have to set up custom dimensions. First you have to create them in the properties setting in you GA admin panel (under "custom definitions", and you probably want to go for hit scope). Then you can pass values in your event tracking calls. You have to pass them into the configuration object of the event tracking call (as opposed to set them via the set method) to make sure they are only associated with that specific event and not with all hits on that website. You do not address custom dimensons by the name you gave them in the backend (that's for the reports only) but by the string "dimension" followed by the numeric index.
ga('send', {
'hitType': 'event',
'eventCategory': 'screening-view',
'eventAction': 'Bolshoi Ballet',
'eventLabel': '2015/12/12',
'dimension1': '10pm', // time
'dimension2': 'Opéra national de Paris', // location
'dimension3': 'you know, that little ticket stall close to Monmatre' // vendor
});
You only have 20 custom dimension per property in the free version of GA. And they won't show up in the standard reports (you can set them as secondary dimension, though), but you can use them in segments, in view filters and most importantly in custom reports.

Best way to handle this is by using event based analytics tool such as: Mixpanel.com , Kilometer.io or Kissmetrics.
Tacking an event(with an array of key:value metadata) is exactly what those tools were designed to do.

Related

How to select Event name when adding Custom dimension

I created events on my website using gtag("event", "qualify", { site: "Example site" }) and I can see the data is being sent to GA (real time report).
Now I want to create a report showing all users that qualify (event) with the site name (event parameter). I read that I need to create a Custom dimension. Where do I select the Event name?
In my experience, you have no possibility to select the Event name. If some of your events have parameters with same names, GA will create one custom dimension. This dimension will displays in reports of every event, which has parameter with selected name.

Events and Goal completions don't work together?

I have a goal completion when user visit the specific page. Also I'm sending event from this page to count how many times user visited this page during the session (and for some other info).
Now I'm trying to make a custom report (flat table) that have info about:
Session ID (custom dimension),
Event Category (secondary dimension),
Goal completion (metric)
and Pages/Session metric.
In this case I see that Goal completion is zero for every session although I see events from the page (and I know that goal was completed in every session cause it's testing site).
If I remove Event category from custom report then Goal completion equals 1 for each session (that is true info).
And if I'm trying to use Event category in filter it is the same situation - I don't see Goal completed.
'Event Category' is a hit-level dimension, but other dimensions and metrics have session-level. It's invalid dimension-metric combination.
Try to use custom segment with conditions: include sessions where 'Event Category' = [your value].
Good explanation of scope in GA: https://www.bounteous.com/insights/2016/11/30/understanding-scope-google-analytics-reporting/

What happens when pushing variable to dataLayer multiple times

Lets say for instance I have a web game on a page and the code is set so that every time the player completes a level it pushes the current level to the dataLayer:
dataLayer.push({'level': currentLevelNumber});
Does this then mean I will be able to create segment in GA to see how many people made it to each level? i.e. segment1(level = 1), segment2(level = 2) etc..
Also, what are limits of this? GA has a 500 event limit per session. Is pushing a variable part of this limit or does it have its own limit?
I tried to find this information in documentation but couldn't see it.
Essentially, you're trying to report on the levels that your users are on for a particular game.
To do this, you will need to create a user-scoped custom dimension within GA.
Then you would want to push to the datalayer whenever the user moves to another level something like:
dataLayer.push({
'level': currentLevelNumber,
'event': 'user-lvl-update',
});
Then in GTM, create datalayer variable to capture "level" and create a custom event trigger for the "user-lvl-update" event.
Then in GTM, create a GA tag for the event "Level Update" and configure it normally, but this time, check the "Enable overriding settings" checkbox, under "More settings > Custom Dimensions" click on "Add custom dimension", enter in the index number of the custom dimension you created earlier and for dimension value, put in the variable where you captured level. Trigger this tag using the "user-lvl-update" trigger.
There is a limit of 500 hits per session. A hit is a pageview, event, etc. whenever you're sending data to GA. Pushing to the datalayer doesn't count towards that

Track click data as % with google analytics

I have a new feature which is exposed to some visitors to my website, depending on what they search for.
I want to know "if the feature is exposed to them, how many interact with it", ideally as a percentage.
I use GTM / GA but not sure how to get this relativity.. any ideas on how I could do it? Thanks
You can track this in many ways a simpler one would be to use an event. If you want it with visualization you can create an event based goal where the destination goal could be the event of interaction.
When an user is exposed with the new feature then fire an event. Configure this as an required event for the goal and destination event could be the interaction one.
After you get all the event counts then you can manipulate the data as you want.
I think the step you are missing is the detection of the elements on page. To do this create a Custom JavaScript variable (lets call it 'Detect'):
function(){
return $('#FILTER_ID).length>0
}
This function looks for whether an element with the id FILTER_ID is present on page, and returns true or false.
From here you have a number of options.
1: Create an event on page-view if Detect equals true. Create an additional event for clicks on the element. Divide clicks events by pageview events and you have your interaction ratio.
2: Create a new hit level custom dimension. In your Pageview Tag, set this custom dimension to the value - Detect. Create an event for clicks on the element. Create a session segment where Detect equals true, then divide events by pageviews and you have your interaction ratio.

How do I push an object onto the dataLayer

I'd like to use object in the atalayer. I've followed the developer docs and they show a flat data model. I'd like to push a lead object and update it as a user enters info into a Lead form.
with company, size and location, key and value.
dataLayer.push({'event': 'company_on_blur'}); //on leaving a company field
dataLayer.push('lead.company', '<company>');
dataLayer.push('lead.size', '<company-size>');
dataLayer.push('lead.size', '<company-location>');
dataLayer.push('lead.key', '<value>');
Is there a way to push all this data as a structured lead object?
onclick="dataLayer.push({
// lead data object
});
also how can I modify just one property of an object once it is pushed
dataLayer.push({'event': 'company_on_blur'}); //on leaving a company field
dataLayer.push('lead.company', '<company>'); //update the value in the object
Yes, you can push several values at once with dataLayer.push. It will become something like this:
dataLayer.push({
'event': company_on_blur,
'lead.company': company,
'lead.size': company-size,
'lead.location': company-location,
'lead.key': value
});
To update a value in object on a given event - just use the event as a firing trigger (Fire tag X when custom event equals company_on_blur).
If your idea is to get a fields values from a form and send them to GTM - it's easier to create the variables for the values extractions, create the trigger company_on_blur and fire a tag for collecting the data. You can use also a form submit click as a trigger instead of leaving the field, if you are ok to collect these only for people which clicked the submit button. This way you will collect all data at once.

Resources