Analytics: Track any custom event you want and use custom fields for segmentation

local AS = game:GetService("AnalyticsService")

game.Players.PlayerAdded:Connect(function(plr: Player)
	AS:LogCustomEvent(plr, "APlayerJoined", os.time(), {
		[Enum.AnalyticsCustomFieldKeys.CustomField01.Value] = plr.Name .. " has joined the game.",
	})
end)

I made this code yet it does not show on charts at all

Hi! You can check your events in the View Events window in real time to make sure that they are coming in since the charts take ~24 hours. Some slight notes about your event tho:

  • We only show aggregations of the value so if you use time as the value we will only be able to show you min/max/avg of the time
  • Make sure you use CustomField01.Name instead of .Value - read more here: Custom Fields | Documentation - Roblox Creator Hub
  • Using the player name in the value will deplete your cardinality limit for custom fields really fast since we only support up to 8,000 unique values.

If you want to see when your players are playing the experience I’d recommend also checking out the Engagement and Performance dashboards.

Oh ok thanks. Yeah ill rewrite the code as told
But on another note, I think it should be explained better on the Docs because its too complicated to understand. I personally had to go to youtube and forms just to understand how it works

I added a event in a skip loading screen button to see how much people click it I made two one with the time it player waited and one without but both doesn’t appear on the dashboard the game is private though

Were you only playing in Studio? Events only can correctly sent in for chart creation if in a live game server.

It’s in live game server and private game

Is there any errors in the console? Also maybe the game being private cancels any Analytics? I am not sure.

I’ve also had issues getteing this to work, I’ve had this in here since this announcement first went out, and yet my events on the site are empty.

local PLR = game:GetService("Players")
local ANS = game:GetService("AnalyticsService")
local player = PLR.LocalPlayer

... (below is in the event that fires when the teleport button is pressed)

print(currentMap.shortName)
ANS:LogCustomEvent(player, currentMap.shortName)
print('sent')

image

This is in a live, public game. I’ve refreshed the events on the site multiple times and nothing comes up, there’s no error, so I’m pretty confused on why its not doing anything.

UPDATE

So after posting this I had a hunch that it might only work server-side, so I did that and I actually got an error:
29 - 18-04-28

Okay, so I fixed the strings and tried again. No error. Refreshed the events on the site and it’s there!

I did not realize that this was server-side only, I reread the annoucement and the docs and either it’s not mentioned or I’m very blind, either way I’m putting this here in case anyone else had the same issues. Server side only, filter out punctuation chars. Would be nice to see this mentioned on the docs (if it isnt already, i may have just missed it)

2 Likes

Hi! We’ve just rolled out an update to fix this issue. You should now be able to send events on player remove without additional changes.

Ok, so I have it working, but how do I remove all the other custom events that I’ve already logged

They will automatically go away in 90 days. Cardinality limits are also calculated daily so once you stop sending the old events they won’t count towards your limit.

1 Like

Hey, one last thing: Is it possible to filter by two custom fields at a time, but instead of requiring both, can the data shown be either? For example, I’m also logging the bricks recipes, like Energy + Red = Ash. The recipes can be in either order (Red + Energy = Ash.) If I wanted to compare the rarities of bricks created with Energy, I would need to filter Custom Field 1 & 2 to be Energy, but that would only show bricks made with Energy + Energy. Essentially, is there a way to make the filtering by “or” instead of “and”?

Unfortunately not right now - we’re still exploring options that would allow more free form queries. I’d recommend ordering the recipes before sending them so it’s deterministic or building your custom fields in a different way e.g. you could send HasEnergy as custom field 3.

I am not entirely sure if it just bugged, but I had a Custom Event go through without a custom_field_1 value.

Here is my code:

AnalyticsService:LogCustomEvent(
	Player,
	"ItemObtained",
	1,
	{
		[Enum.AnalyticsCustomFieldKeys.CustomField01.Name] = "Item Name: " .. MusicName,
		[Enum.AnalyticsCustomFieldKeys.CustomField02.Name] = "Item Type: Music",
		[Enum.AnalyticsCustomFieldKeys.CustomField03.Name] = "Obtainment Method: Shop"
	}
)

Here is what I got in return:

{
“user_id”: “1234567890”,
“event_name”: “ItemObtained”,
“value”: “1”,
“custom_field_1”: “”,
“custom_field_2”: “Item Type: Music”,
“custom_field_3”: “Obtainment Method: Shop”
}

As you can see, my custom_field_1 value is just totally blank when my script should not even being letting that happen in the first place? Anyways, everything has been working great other than this. (I replaced the UserId for privacy reasons)

Hey, that’s me! Yes, it seems like it. Gamebeast’s features include a lot more than just custom events, also heatmaps, A/B testing, remote configurations, audience segmentation, cross-game insights, and more offerings to empower developers. It looks like Roblox won’t be releasing any of those for at least a year and our larger ecosystem of tools aims to support Roblox developers in optimizing their games and let them get back to creating great content rather than fighting the algorithm.

Oh. Since you’re here. Would you like to collaborate with me?

I could use some… uh… economic moat for my machine and deep learning libraries for Roblox. You can view them here:

DataPredict

DataPredict Neural

1 Like

You can join our server to learn more and get access to all of these features!

Hi! Are you still having this issue? I would recommend double checking the value of MusicName and if it contains any invalid characters e.g. '. Feel free to message me if you’re still having issues!

Even if the value somehow was nil (which it wasn’t, it was part of a shop validation script on the server), shouldn’t it still at least show the text "Music Name: "?

Anyways, I only had this issue twice, and then it worked fine from that point on. When sorting by custom_field_1 in my custom analytics, it appeared as N/A in the graphs.

Some feedback on the custom events: I use them to log the intial load times for players, however the charts aren’t proving very useful for this usecase.

  • It rounds all values to the nearest integer, which is not good when logging loadtimes that are sometimes measured in milliseconds. The above shown chart is the overall client loadtime, the more granular charts I made like individual module loadtimes have times <1s meaning the charts are useless.
  • I can only aggregate by average and average per unique user. It would be great to sort by percentiles like P99 or P50 so I can see the actual range of values rather than a single number to represent a huge variety of edge cases.

Otherwise these custom events are VERY useful and pretty robust so far.

1 Like