16 Oct 2025 08:50 AM
Hi, I'm following this guide:
Query and visualize Grail data | Dynatrace Developer
But it seems that the TimeseriesChart doesn't show the proper metric type. If for example I run this simple DQL:
Solved! Go to Solution.
16 Oct 2025
09:30 AM
- last edited on
16 Oct 2025
09:53 AM
by
imsingh
Hi Tommaso!
The simplest way would be to use our Formatter in such a way, let me know if this works for you now:
import React from "react";
import { useDql } from "@dynatrace-sdk/react-hooks";
import { DQLResultConverter } from "@dynatrace/strato-components-preview/conversion-utilities";
import { TimeseriesChart } from "@dynatrace/strato-components-preview/charts";
import { format, units } from "@dynatrace-sdk/units";
export const Data = () => {
const query = "timeseries avg(dt.service.request.response_time)";
const result = useDql({
query,
});
return (
<>
{result.data && (
<DQLResultConverter queryResult={result.data} convertTo="timeseries">
{(data) => (
<TimeseriesChart data={data} variant="line">
<TimeseriesChart.YAxis
formatter={(value) => format(value, {input: units.time.microsecond, maximumFractionDigits: 0 })}
/>
</TimeseriesChart>
)}
</DQLResultConverter>
)}
</>
);
};
16 Oct 2025 09:54 AM
Thanks Haris,
your code works well but what I need something that works also in cases of two timeseries returned by DQL, each of them with different data types. For example a DQL like this:
16 Oct 2025 10:38 AM - edited 16 Oct 2025 10:49 AM
Of course, that is also possible; we just have to individually assign data to different YAxis, and in that case you wouldn't have to use append either, but simply you can use single query to fetch two different metrics, but this should work in both cases, take a look:
import React from "react";
import { useDql } from "@dynatrace-sdk/react-hooks";
import { TimeseriesChart } from "@dynatrace/strato-components-preview/charts";
import { Flex } from "@dynatrace/strato-components/layouts";
import { ProgressBar } from "@dynatrace/strato-components/content";
import { convertToTimeseries } from "@dynatrace/strato-components-preview/conversion-utilities";
import { format, units } from "@dynatrace-sdk/units";
export const Data = () => {
// Option 1: Your suggested append syntax
const query = `timeseries response_time = avg(dt.service.request.response_time) | append [timeseries request_count=count(dt.service.request.count)]`;
// Option 2: Alternative multi-metric syntax
// const query = `timeseries avg(dt.service.request.response_time), count(dt.service.request.count)`;
const result = useDql({
query,
});
if (result.data === undefined) {
return <ProgressBar />;
}
const [responseTimeTimeseries, requestCountTimeseries] = convertToTimeseries(
result.data.records,
result.data.types
);
// Set proper units - this helps with the automatic formatting
responseTimeTimeseries.unit = "microseconds"; // Keep original unit info
return (
<Flex flexDirection="column">
<TimeseriesChart style={{ padding: "8px", boxSizing: "border-box" }}>
<TimeseriesChart.YAxis
position="left"
label="Response Time"
formatter={(value) =>
format(value, {
input: units.time.microsecond,
maximumFractionDigits: 0,
})
}
/>
<TimeseriesChart.YAxis position="right" label="Request Count" />
<TimeseriesChart.Line data={responseTimeTimeseries} />
<TimeseriesChart.Line data={requestCountTimeseries} />
</TimeseriesChart>
</Flex>
);
};
Let me know if that's your wanted result 🙂