[Legacy Analytics] Data Processing Limits

We’ve heard your feedback and we are getting rid of Analysis Points!

TL;DR
Our old system limited you to only the first 1,000 combinations of event / parameters / values.
Our new system will show you the 5,000 most frequent combinations of events / parameters / values.

What are Analysis Points?

Analysis Points were the old way we imposed limits on Custom Events. Some events are more costly to process, so they cost more Analysis Points. But this resulted in developers doing overly complicated calculations and bending over backwards to fit into our data limits. Analysis Points also limited users to only the first 1,000 event / parameter / value combinations that we received. From now on, you don’t have to worry about doing any messy calculations based on the data types of your custom event parameters.

What is changing?

We are moving to a system that prioritizes the most frequently seen events in your game. So you will now see the top (most frequent) 5,000 event / parameter / value combinations in your dashboard. The top 5,000 combinations will be reevaluated daily, so we will always be showing you the most relevant data. We chose that number specifically because it will have the least impact on our existing dashboard users. Currently, 98% of users fall well below this limit.

One additional benefit of this change is how we calculate numbers. Right now when you send us a number, we aggregate it to give you the count, sum and average of the values you send. However, if you are sending us a level number, then that aggregation isn’t as useful to you.

For example, if you send us the following event:

Analytics.CustomEvent(“LevelStart”, new Dictionary<string, object>{
    {“level_num”, 5}
});

Rather than just giving you the average of level_num, we will now also display a count for each value for level_num. This is what developers expect to see when they send us these values, so this is what we will be showing them. (We do have to impose a limit on this, since there are a lot of numbers. So we will only do this for the top 500 numbers received.) And to enhance the readability of the dashboard UI, we will show you the top 10 parameter values plus an “others” bucket for the rest, in any parameter view (e.g. pie chart).

How will this affect you?

For the vast majority of people (97.862% according to our engineering team), this change will have no effect on your existing dashboard. The biggest benefit is that you can spend less time worrying about Analysis Points. Now developers can focus on tracking the data they want without jumping through extra hoops.

For a small percentage of users, their dashboards will only show the top 5,000 event / parameter / value combinations, even if they have sent more than that. However, unlike with the Analysis Points system where any events exceeding the limit were discarded, these events are still counted. And every day, the top events will be re-evaluated to make sure your dashboard will always show you the most relevant data.

What do you need to do?

This change is in our back end processing, so you don’t have to do anything to get these benefits.

FAQ:

*What about the 100 per user per hour limit?

The client-side limits (100 per user per hour and 10 parameter limit) are unaffected by this change.

*What is going to happen to the Event Manager?

The Event Manager will still show you the events and parameters we’ve received from your game. And you will continue to be able to disable them, so they do not appear in the Data Explorer and so they are not counted in the top 5000 values.

*How will this affect events in Raw Data Export?

Raw Data Export will not be affected by this change. Raw Data Export will always include every event sent from your app.

*Is this limit for Personal, Plus or Pro users?

The same data processing limit applies to all users equally.

Hello the Unity Team,
Glad to see you are working hard to give us the best analytics experience, thanks!
I see in my new dashboard that the events I previously switched OFF on the old dashboard does not appear anymore (not even with the gray switch like before). Is it an expected behavior? It’s not a big deal right now, but maybe someday I will need to set them ON again, how can I do that? And today, in the new dashboard, if I switch OFF an event, will it still appear in my dashboard after that (of course, with a gray switch)?
Regards,
Nicolas

My plan was to record some additional data surrounding levels so I had the analytics available to me, but I’m not certain that this new approach by Unity is helpful or hurtful to me. Imagine that I want to do something like this:

Analytics.CustomEvent("LevelFinished", new Dictionary<string, object>
    {
        { "level_num", levelNumber },
        { "seconds_to_finish", someTimeValue }
    }
);

Given that seconds_to_finish could end up being anywere in the range of, say, 10 seconds to 1000 seconds, and I have many different levels, then it sounds like this limit of 5000 combinations of events/parameters will hurt me from doing this.

Am I unable to track analytics in this manner, or am I misunderstanding the new data limits?

Edit: Actually, it looks like in the raw data export I’m fine. This just affects what shows up in the dashboard. Please let me know if that’s correct.

As you noted in your edit, I think you misunderstood the system. As far as I understand, “second_to_finish” will be stored as an integer, so only 1 point in the limit, no matter the number of different values.
However, where you may have difficulties is with “level_num”, if this entry is an integer, because you will not have the possibility in the Unity graph tools to display separately the levels (for example making a curve showing the average time to finish the level 6 is not possible like that). You should transform your integer in string to be able to do that:

Analytics.CustomEvent("LevelFinished", new Dictionary<string, object>
    {
        { "level_num", "Level "+levelNumber },
        { "seconds_to_finish", someTimeValue }
    }
);

I let the Unity team complete or correct me if necessary.

@NicoL3AS

That is correct; events don’t appear in the Event Manager after they have been disabled. We are evaluating how this change impacts developers and we always welcome suggestions about how we can improve the usability of our service.

@trdinich

That is a good question and something I didn’t specifically touch on in the post.

First, not that you asked specifically, but I wanted to make sure it’s clear. Numbers are tracked separately from string values. So we are tracking the top 500 numbers from your app, which will be kept on a different list than any string values that we are tracking. This is because numeric parameters could take on many more possible values than most string parameters.

Second, we are tracking numbers in the same way as strings now, so if you send “level_num”, you will see a count of each value you send. This previously required you to send the numbers attached with strings (as suggested by NicoL3AS).

So when you send numbers, such as your “level_num” and “seconds_to_finish” parameters, they will basically be counted as strings and numbers. So in the Data Explorer, you will still see the traditional count, sum, and average (which will be useful for “seconds_to_finish”. But you will also see the count for each value of “level_num”.

As for the data limits, I don’t think it will affect you very much. An example might clarify things:

Let’s say you send us the following events over the course of a day:

Analytics.CustomEvent("LevelFinished", new Dictionary<string, object> {  { "level_num", 1}, { "seconds_to_finish", 100} });
Analytics.CustomEvent("LevelFinished", new Dictionary<string, object> {  { "level_num", 1}, { "seconds_to_finish", 115} });
Analytics.CustomEvent("LevelFinished", new Dictionary<string, object> {  { "level_num", 2}, { "seconds_to_finish", 100} });
Analytics.CustomEvent("LevelFinished", new Dictionary<string, object> {  { "level_num", 1}, { "seconds_to_finish", 80} });
Analytics.CustomEvent("LevelFinished", new Dictionary<string, object> {  { "level_num", 2}, { "seconds_to_finish", 95} });

The combinations that we would track would be:

(LevelFinished.level_num, 1) - Count: 3
(LevelFinished.level_num, 2) - Count 2
(LevelFinished.seconds_to_finish, 100) - Count 2
(LevelFinished.seconds_to_finish, 115) - Count 1
(LevelFinished.seconds_to_finish, 80) - Count 1
(LevelFinished.seconds_to_finish, 95) - Count 1

Since we are tracking the most frequent events, I would expect your level numbers to occur more often than any particular completion time, so you should always be able to see your level data.

It may be the case that you might not see every individual time that has been sent in the Data Explorer, but that is data that is best aggregated, which will still be available.

Ok so in case it was not clear: in my case it would be good to have the events appear in the Event Manager even if they are disabled.

A simple example: I have a list of words in my app, which the user can search in. For each search, I send an event with the searched pattern attached. Of course this generate hundreds of possibilities, so it make me use a big part of my Analysis Points. I tested it and disabled it after a while to not explode my point limit, but later I would like to reactivate it without publishing a new version. And this is possible only if I can re-enable the disabled event.

I was looking at how to display data today, and it seems that in the Data Explorer you can select the parameter level_num (that is a number), but treat it as a string parameter (select it as level_num [A] instead of level_num [#]).
If you do so, you’ll have a graph per level.

If that’s what you meant, you won’t need to convert to string which would be more flexible.

You’re right @v01pe , I had never seen this option before. So yes, no need to force the event to a string in your code.

Having a issue where I can’t seem to turn off custom events in the Event Manager. I turn them off, save the changes and when I return to the page they’re enabled again.

@alleballe90 ,

The front-end team has just released a fix for this bug. Please try to enable / disable your events again.

If you still encounter this problem, please submit a support ticket:

Hi There!

Since we are being limited on the forn end dashboard to only the top 10 event parameters sent for each custom event, would RAW DATA EXPORT be our only option to be able to get ALL the custom events data from all users and all custom events? we are thinking on using GitHub - shinyshoe/ua2sql: Collect raw Unity Analytics data and ingest it into a PostgreSQL database. and then model it with Tableau. Any thoughts or recommendations for a simpler solution?

Thxs!

Ari

@alisjak We recently made some changes to our back end architecture to allow more flexibility when sending custom events. This led to a potential issue in our front-end where data sent would overwhelm our dashboard. As a short-term solution, we limited the dashboard to only displaying 10 parameters but rest assured that we are working on a fix for this.

To answer your question, Raw Data Export would be your best option for now to get all the custom events. We’ve never tested the script you linked but I looked it over and it looks like it will get you the results you want (at least in theory).

Let me know if it ends up working for you!

Hi

Is there a way to see all of the parameter values associated with an event on the dashboard? Rather than just the main 10 and an ‘others’ bucket?

For example, In my game AuroraBound (http://www.aurorabound.com/) I have a ‘world_reached’ event and one of its parameters is ‘world_name’ which is a string such as “world_1”. I want to use this as a way to track p

layer fall off over time - to see if there is a particular world (and associated difficulty) players leave the game after, but my game has a theoretically infinite number of game worlds. Its only been out for a week and some players are already completing world 50! Here is a screenshot of what I mean:

I need to explore the bottom ‘other’ bar there - Most players just try the game for an hour or two and stop by world 10, which I expected as it is a free to play title, but I want to know what the fall off is in the later worlds.

1 Like

there is one thing puzzled me, i use code below:

Analytics.CustomEvent("test_event", new Dictionary<string,object>()
            {
                { "status",mMapInfoStruct.IsFinished ? 1 : 0 }
            });

but i can see in the graphic:
XXX-status
0
1
others

So,what happened?i didnot upload the “ohters” via “test_event”

Hi,
I about 20 Custom Events, each is only a count. I am installing the information into the Unity Analytics web page, but any new Custom Event, past 18 Custom Events, is now, by default, not a Count, but a Calculation.

Kind of concerned.

EDIT:
I think it moves to Count, once you set it to Unique Users.

Edit Edit:
It has returned, where some are indeed, Undefined.

HELP!

@rikkir Making some assumptions, I suspect you have something like Analytics.CustomEvent(“MyEvent”, 3) and Analytics.CustomEvent(“MyEvent”, 4) etc ? And you want to know the number of 3’s and the number of 4’s? Otherwise, can you clarify?

@FinalDaniel Good point with “others”. Any solution with the “10 Custom event” limit?

Looking for it too. 10 custom event

I moved to Game Analytics now which doesn’t have a 10 parameter list limit.

I used an analytic(Analytics.CustomEvent) but didn’t see any diagrams…((