histogram or group users by number of campaigns they received - google-analytics

I'm trying to bucket users by how many distinct email campaigns they receive. I want to be able to visualize similar to how "Count of Sessions" works. I can get count distinct of campaign as a metric but need to turn it into a dimension. I've tried writing:
Case
when COUNT_DISTINCT(Campaign = 1) then "1"
When COUNT_DISTINCT(Campaign =2) then "2"
When COUNT_DISTINCT(Campaign =3) then "3"
else "more"
End
The end result I would like is a table that looks something like this:
Received 1 campaign, X amount of users
Received 2 campaigns, Y amount of users
Received 3 campaigns, W amount of users
... (and so on)

This is not possible since CASE aggregation only works over report dimensions but not over actual user records.

Related

Google Analytics: How to properly filter ga:1dayUsers and ga:30dayUsers

Question: What is the right way to filter active users based on the presence of an event?
I'm trying to report on a count of users that have performed a particular action (purchased an item) on my site.
The aim is to have a Daily Unique Buyer (akin to DAU or 1dayUsers) and Monthly Unique Buyer (akin MAU or 30dayUser) metric.
For the Daily Unique Buyer metric I have tried two separate approaches and I am getting different results for both.
Approach 1) Use ga:Users metric and apply filter ga:eventCategory=="Purchase"
Approach 2) Create custom Segment, Ensure that Advanced Filter condition is for Users (not Sessions) and set the same filter ga:eventCategory=="Purchase"
The first approach seems to yield the desired result when compared to the second.
Unfortunately, the first approach does not extend to computing the same metric for Monthly Unique Buyers.
Most post on StackOverflow suggest that creating a segment (approach 2) is the right way forward. This however, yields more users than events, which can't be correct.
Even more perplexing - Applying the segment in Audience -> Active Users interface yields a different result to programmatic app-script query below
const optArgs = {
'dimensions': 'ga:date',
'sort': '-ga:date','
start-index': '1',
'max-results': 250,
'segment: 'gaid::xxxx',
}
Analytics.Data.Ga.get(
myViewId, startDate, endDate, 'ga:1dayUsers', optArgs
);
update: For those that struggled with this. I don't claim to understand why, but I was able to get the correct number by querying the desired metrics 1dayUsers and 30dayUsers one date at a time.
Running the report over a date range failed. I checked this with the list of actual active users (under User Explorer in the interface) and both 1 day and 30 day metrics are correct.
Would love for someone to explain why this is needed.

Google Analytics Checkout Behaviour in Bigquery

does anyone know how to extract checkout behaviour from the Google Analytics export in BigQuery?
E.g. I'd like to calculate abandonment at each checkout stage. I've raked through the schema -
https://support.google.com/analytics/answer/3437719?hl=en&ref_topic=3416089
but it doesn't seem to have the equivalent data from GA i.e. the details within shopping stages such as
"CHECKOUT_1_ABANDONMENT"
.
I can get each checkout step using hits_eCommerceAction_step but can't calculate exits here, they're always just blank when I do a count of hits.isExit
hits.isExit refers to the last page in the session. It will not help you here, unless you want to know if any step was also the session exit.
Regarding e-commerce steps, you could define the highest step number per session as being the exit step or the last one seen - but I guess the highest makes more sense?!
Oh, and you have to translate what each step number means by yourself. It literally just tracks the number, not the meaning.
You can do it like that:
SELECT
(SELECT MAX(ecommerceaction.step) FROM t.hits) AS maxStep,
SUM(totals.visits) AS sessions
FROM `project.dataset.ga_sessions_2018*` t
GROUP BY 1
ORDER BY 1
If you want the "last step in a session"-logic, you would do it like that:
SELECT
(SELECT ecommerceaction.step FROM t.hits WHERE ecommerceaction.step is not null ORDER BY hitnumber DESC LIMIT 1) AS lastStep,
SUM(totals.visits) AS sessions
FROM `project.dataset.ga_sessions_2018*` t
GROUP BY 1
ORDER BY 1
I didn't check if these are translations to Google Analytics numbers but should be helpful, I hope, getting in this direction.

Google analytics - metrics mismatch while exporting data via API with various set of dimensions

I am working on GA reporting metrics in Power BI via reporting API.
While I create a query with some very basic attributes like sessions and users, I get same values as I can see directly in google analytics dashboard.
but when I add more dimensions and attributes, say, user type, pageviews or gender etc, alingwith users and sessions, the value of users and sessions is inflated.
I have tried to go through various documentations, where I know there are some restrictions that not all dimensions and attributes can be put together, but in this case, GA has allowed me to add these basic attributes togehter but the results are not matching.
Is there any documentation to explain this behaviur, or has anyone experienced anything like this.
has this to do something to do with binning, though I would expect, even if the difference is due to different binnings on different counters, the difference should be a smaller value, not the ones I am getting, which is huge(multiple times of error ) not just few percent of error.
I have come across with this problem and the reason is because of a limit on Google Analytics Core Reporting API.
Sampling thresholds
Default reports are not subject to sampling.
Ad-hoc queries of your data are subject to the following general
thresholds for sampling:
Analytics Standard: 500k sessions at the property level for the date
range you are using
Analytics 360: 100M sessions at the view level for
the date range you are using
i.e. Once the data you are requesting is returning more than 500k sessions / rows of data in a query, Google Analytics will return sampling data but not exact data.
The way I work around with this limit is to break down the query into separate queries (to make sure the returned data is fewer than 500k rows) with a date filter (per year, month or day, depends on data volume) apply to each of it. Then append all the queries back into one.
Sample M code:
(year as number, month as number) =>
let
Source = GoogleAnalytics.Accounts(),
...,
#"Added Items" = Cube.Transform(#"...", {{Cube.AddAndExpandDimensionColumn, "ga:pagePath", {"ga:pagePath"}, {"Page"}}, {Cube.AddAndExpandDimensionColumn, "ga:pageDepth", {"ga:pageDepth"}, {"Page Depth"}}, {Cube.AddAndExpandDimensionColumn, "ga:pageTitle", {"ga:pageTitle"}, {"Page Title"}}, {Cube.AddAndExpandDimensionColumn, "ga:date", {"ga:date"}, {"Date"}}, {Cube.AddMeasureColumn, "Page Load Time (ms)", "ga:pageLoadTime"}}),
#"Filtered Rows" = Table.SelectRows(#"Added Items", each [Date] >= #date(year, month, 1) and [Date] <= Date.EndOfMonth(#date(year, month, 1)))
in
#"Filtered Rows"
Result:

Tracking and grouping parameter based Goal Destination URL in Google Analytics

I have a reservation.php page and on success, the page returns/post a 5 digit Confirmation No. as part of the URL. e.g. /reservation.php?Success=&ConfirmationNo=29564
In Google Analytics > Admin > Goals Detail > Destination URL, I have set the type "Begins with" and set the URL to /reservation.php?Success=&ConfirmationNo= But in Reporting > Conversions > Goals > Overview, it do not group (Goal Completion Location) all reservations into one goal URL instead showing each reservation URL separately. e.g.
Goal Completion Location:
/reservation.php?Success=&ConfirmationNo=29566
/reservation.php?Success=&ConfirmationNo=29567
/reservation.php?Success=&ConfirmationNo=29568
So I unable to compare the number of reservations with the previous month. I want it to show something like /reservation.php?Success=&ConfirmationNo= as one location with number of reservations in a period selected.
I tried to add . or * or .* at the end of URL and selected both "Begins with" and regular expression to group all the reservations but "Verify this goal" tool do not accept any of these and shows 0% completion in last 7 days.
Can you please help how can I group all my reservations into 1 Goal Completion Location?
Well Google Analytics does exactly what you told it to do. There are two different things:
Goal - a goal is triggered when the URL starts with /reservation.php?Success=&ConfirmationNo=
Goal completion location - simply shows the actual location where the goal happened
If you want to compare goals by month, go to Conversions -> Goals -> Overview. At the top left, choose name of your target in the dropdown menu (below segments). At the top right, choose grouping by month. At the very top right, choose the time period for which you want to compare data (at least two months).
Now you will see the chart of number of goals per each month in the specified time period.
If you are still unhappy with this reporting, then pass the variable ConfirmationNo in the $_POST field instead of the $_GET field.

Working with event stat in google analytics api

I have the website where merchants sell some stuff. Each item has stats like unique views during last 24 hours, a week and a month and a number of visitors that clicked on "show contacts" button. Uniqueness based on IP. This works, there're huge tables that collects all (IP,item_id) pairs during the last month, and there're a lot of updates.
Today I dig into google analytics api, I would like to know if it's possible to use it instead of my system.
The fact is all this stat is private, available only for merchant, so I don't need to have all stat at a time (it's not compared etc.). So it might be requested on demand for the specific item.
I created service account, connected it to analytics data and it seems export works (based on this example). Then enabled event tracking for "show contacts" button.
For example, when user click on "show contacts" where should I add item_id? Is it eventLabel or eventValue? So, for item_id=1234 it should be
ga("send","event","Contacts","show","",1234) or ga("send","event","Contacts","show",1234)?
I'm confused with eventValue column in Top Events report (it seems that eventValue keeps a sum of all eventValues and even caculates Avg.Value). Does it mean item_id should be stored in eventLabel as string?
I added second, nonInteraction event for collecting item views, ga("send","event","Data","show","1234",1,{nonInteraction:true}). It count all events, but I need only unique ones (performed by unique visitors) in specified period of time (day, week, month). Is it possible?
1) The parameters are category, action, label and value. "Value" is a metric and is expected to be an integer. Since it's a metric it will be added up. So if you do
ga("send","event","Contacts","show","",1234)
you will increment a metric by 1234, not store an id. You do not want this (especially if you have a linked adwords account, since this will be used to calculate your "return on advertising spent").
You want to use your item_id as label, however label is a string. So what you need to do is:
ga("send","event","Contacts","show","1234")
i.e. wrap the value for your label in quotes.
2) Is there anything wrong with ga:uniqueEvents for your purposes ?

Resources