Dynatrace tips
Tips and workarounds from Dynatrace users for Dynatrace users.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Pro Tip: Scatterplots with two metric variables/timeseries

marina_pollehn
DynaMight Champion
DynaMight Champion

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" 
For my queries, I used the Dynatrace demo environment.
 

marina_pollehn_0-1763551244712.png

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"
 

marina_pollehn_1-1763551244685.png

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 here
 

Unfortunately, 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.

marina_pollehn_2-1763551244534.png

 

marina_pollehn_3-1763551244655.png

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:

marina_pollehn_4-1763551244715.png

 

marina_pollehn_5-1763551244642.png

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)
Result:

marina_pollehn_6-1763551244717.png

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:

marina_pollehn_7-1763551244606.png

 

|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).

marina_pollehn_8-1763551244724.png

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:

marina_pollehn_9-1763551244651.png

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.

A Dynatrace Professional nerd working for Conclusion Xforce
1 REPLY 1

AntonPineiro
DynaMight Guru
DynaMight Guru

Thank you so much! :take_my_money::take_my_money:

❤️ Emacs ❤️ Vim ❤️ Bash ❤️ Perl

Featured Posts