19 Nov 2025 11:27 AM - edited 19 Nov 2025 11:29 AM
I am trying to break down how you can use the new scatterplot visualization (especially as using it with two metric timerseries does not seem to be a default option). So, I wrote a small blog post on a workaround.
You can find my original post here: Mini Dynatrace Newsletter - November 2025 Edition – Conclusion Xforce Tech Playground
The scatterplot feature exists since 21 oct 2025, SaaS version 1.326 (auto-update, so if you have SaaS this feature is available automatically)
Summary (from the release notes): “You can now use scatterplots in Dashboards and Notebooks to visualize data relationships and identify patterns, such as correlations between response time and request count. This new visualization helps you analyze metrics more effectively and uncover insights in your observability data.”
Mini Demo: Let us start off easy with a scatterplot of one metric (y-axis) against the timeframe (x-axis), so a metric over time. This is a nice alternative to line graphs.
timeseries avg(dt.service.request.response_time), by:{dt.entity.service}
|fieldsAdd entityName(dt.entity.service)
|filter dt.entity.service.name == "CreditCardValidation" If I select a bigger timeframe now, Dynatrace will adjust the interval, meaning that many datapoints will be merged to one. I am not keen on that, as it defeats the purpose of a scatterplot which is supposed to show all datapoints, but we can avoid it by adding an interval ourselves Like that:
timeseries avg(dt.service.request.response_time), interval:1m, by:{dt.entity.service}
|fieldsAdd entityName(dt.entity.service)
|filter dt.entity.service.name == "CreditCardValidation"Now let’s get started on the interesting part, with two different “metric variables” on the x-axis and the y-axis. A small warning/disclaimer: If you create two metrics as a line chart on a dashboard, you can actually also just append them - less beautiful maybe, but it works. As we do want to know the exact y-value for every x-value, to understand their relationship (and these values will be shown without their timestamp on the dashboard), this approach will not work (at least not without additional data engineering with DQL). So you have to use join or lookup commands or create two timeseries immediately in the first step (see my example). More information on joins and lookups: Dynatrace Docs - DQL Correlation and join commands
First, we create two metric timeseries:
timeseries {response_time_p99 = percentile(dt.service.request.response_time, 99),
request_count = sum(dt.service.request.count)},
interval: 1m, by:{dt.entity.service}, union:true
|fieldsAdd entityName(dt.entity.service)
|filter dt.entity.service == "SERVICE-1234567891011"
//enter your own service ID hereUnfortunately, we cannot choose the scatterplot visualization immediately. I actually would have liked that… so we will go for a workaround to make it possible. This is not documented in the release notes or in the Dynatrace Documentation so feel free to follow my steps.
We need to look at a record list, and no longer at two timeseries. The following commands will convert the timeseries to single records:
// Expanding timeseries to single records |fields all = iCollectArray(record(response_time_p99= response_time_p99[], request_count = request_count[])),dt.entity.service.name |expand all |fieldsAdd request_count = all[request_count], response_time_p99 = all[response_time_p99] |fieldsRemove all
Result:
Now it makes sense to remove the outliers (a boxplot would be great now to know which ones to exclude, but that feature does not exist in Dynatrace yet). So, we add the following rules (based on the visual impression of outliers):
//Removing outliers |filterOut request_count > 150 //(number of requests) |filterOut response_time_p99 > 100000 //(100ms)
The amount of requests per minute seems to have a positive relationship with the response time of the slowest 1% requests (more requests are related to a higher response time).
Let’s check if the visual impression of a positive correlation between the “slowest 1% requests” response time and the request count actually exists. For that, we will add the |summarize correlation() command.
//Pearson correlation coefficient |summarize correlation(request_count,response_time_p99)
The result is indeed a positive relationship:
|summarize correlation() already exists for some time, but does fit the use case here, that’s why I included it.
My 2cts: Mostly happy about the feature. More dashboarding options and more data science is always a good step forward. I do miss the option to add a trendline (see the example with R).
For me, this belongs to a good scatterplot. Unfortunately, there is also no documentation page for scatterplots so far, so the link from the DQL tile does not work yet:
Furthermore, it is not possible yet to simply add two timeseries and turn them into a scatterplot with a normal metrics tile or DQL tile without intermediate steps (see the error message). That could be improved in the future to make this feature more accessible to everyone.
19 Nov 2025 12:28 PM
Thank you so much! ![]()
![]()