To navigate directly from a release to its issues in an external tracker, you can configure deep links to your issue-tracking system into your dashboard using DQL (Dynatrace Query Language). For example, you can add dedicated issue-tracking tiles to any existing dashboard, such as the Release monitoring dashboard.
To configure the links, you don't need to store credentials in Dynatrace. Each dashboard tile builds a deep link URL to the issue tracker's native search UI, pre-filtered with the selected release context.
While you can establish dynamic links for any issue-tracking system you have access to and that offers a URL, this guide provides examples for the following systems:
This tutorial is for engineers and platform teams who:
In this guide, you'll add a DQL tile that queries live process release metadata and renders deep link URLs to your issue tracker as a clickable table.
The tile's DQL configuration has three parts:
concat().DT_RELEASE_STAGE, DT_RELEASE_PRODUCT, DT_RELEASE_VERSION) is set on your processes. To set up version metadata, see Version detection methods.DT_RELEASE_PRODUCT and DT_RELEASE_VERSION tag values use slug-style formatting (for example, cart-service, 1.2.1).
Values with spaces, quotes, or special characters will produce broken URLs.
Dashboards, such as creating tiles and configuring dashboard variables.|) and a field expression are helps you adapt them.
Dashboards.Define cascading Stage, Product, and Version variables to scope the tile.
These are standard query-type variables backed by smartscapeNodes. See Add a variable to a dashboard for further information.
Alternatively, you can hard-code your stage, product, and version information as a list or free text.
For each variable, use the following DQL query as its data source. Each query reads live process data and returns a deduplicated list of values.
Reference variables in the tile query with in(field, array($Variable)).
smartscapeNodes "PROCESS"| filter isNotNull(tags[DT_RELEASE_STAGE]) and tags[DT_RELEASE_STAGE] != ""| fieldsAdd stage = tags[DT_RELEASE_STAGE]| dedup stage| fields stage| sort stage asc
Select multiple selection for all three variables so you can filter by multiple values at once.
In data tiles, the DQL deduplicates to one row per product × version, so each row always produces a single URL.
In Markdown tiles, avoid multi-select for $Product and $Version when those values are embedded directly in URLs.
When no value is selected, array($Variable) returns an empty array, and the tile shows no rows.
This is the expected behavior.
Select the tile.
Choose Edit from the tile menu.
In the Data tab, open the DQL expand.
Add the base DQL filter pattern shown below. This base DQL filter ensures the dashboard tile considers the selected dashboard variables for stage, product, and version.
smartscapeNodes "PROCESS"| filter isNotNull(tags[DT_RELEASE_VERSION]) and tags[DT_RELEASE_VERSION] != ""| filter in(tags[DT_RELEASE_STAGE], array($Stage))| filter in(tags[DT_RELEASE_PRODUCT], array($Product))| filter in(tags[DT_RELEASE_VERSION], array($Version))| dedup tags[DT_RELEASE_PRODUCT], tags[DT_RELEASE_VERSION]| fields product = tags[DT_RELEASE_PRODUCT], version = tags[DT_RELEASE_VERSION]// continue with tool-specific fieldsAdd in the next step
Select the pattern for your issue-tracking system from the tabs below.
Append it to the base DQL filter pattern.
Target URL
https://{your-subdomain}.atlassian.net for Jira Cloudhttps://jira.{your-domain}.com for Jira on-premisesJira accepts a ?jql= parameter with URL-encoded JQL. The following JQL fields are common for release filtering:
| JQL field | Meaning |
|---|---|
| Version the issue was reported against |
| Version the issue is scheduled to be fixed in |
| Free-text labels (can carry product/version) |
| Component name |
|
|
|
|
|
|
| fieldsAddtarget_url = "https://{your-subdomain}.atlassian.net",project = "{your-project-key}",assignee = "currentuser()",type = "Bug",affectedversion = version| fieldsAdd jql = concat("assignee = ", assignee," AND project = ", project," AND issuetype = ", type," AND affectedVersion = ", affectedversion)| fieldsAdd jira_link = concat("[Bugs](",target_url,replaceString(jql, " ", "+"),")")| fields product, version, jira_link
For Info, Error, and Resolved variants, build separate JQL fields with different issuetype or status values, then encode and link each one.
If you need to adapt a pattern for a tool not listed above or encode additional characters, refer to the following reference.
DQL has no built-in URL-encode function, but replaceString() covers the cases that matter. Build the query string as a human-readable intermediate field first, then apply replaceString() to encode it before embedding it in the URL. This keeps the DQL readable and avoids manually typing percent-encoded sequences.
These encodings follow the RFC 3986 percent-encoding standard, and are not tool-specific.
Each %XX is the uppercase hexadecimal ASCII code of the character (:=3A, [=5B, ]=5D, ==3D, <=3C, space=20).
Any HTTP client or server decodes them correctly.
The reason specific tools need specific characters encoded is that those characters carry special meaning in that tool's URL or query syntax; the encoding itself is not tool-specific.
| Character | Encoded form | When needed | DQL |
|---|---|---|---|
space |
| Always (spaces break markdown links) |
|
|
| GitHub search params ( |
|
|
| GitLab |
|
[text](url) as clickable links.
Without this setting, Dynatrace displays the raw markdown syntax, instead of a clickable link.Your tile now shows one row per product × version combination, with a deep link that opens your issue tracker pre-filtered for that release. For reference, the complete DQL for a Jira Cloud tile looks like this:
// Filter live-processes with release informationsmartscapeNodes "PROCESS"| filter isNotNull(tags[DT_RELEASE_VERSION]) and tags[DT_RELEASE_VERSION] != ""| filter in(tags[DT_RELEASE_STAGE], array($Stage))| filter in(tags[DT_RELEASE_PRODUCT], array($Product))| filter in(tags[DT_RELEASE_VERSION], array($Version))| dedup tags[DT_RELEASE_PRODUCT], tags[DT_RELEASE_VERSION]| fields product = tags[DT_RELEASE_PRODUCT], version = tags[DT_RELEASE_VERSION]// Define query parameter| fieldsAddtarget_url = "https://{your-subdomain}.atlassian.net",project = "{your-project-key}",assignee = "currentuser()",type = "Bug",affectedversion = version //dynamic field from release information filter// Assemble filter query| fieldsAdd jql = concat("assignee = ", assignee," AND project = ", project," AND type = ", type," AND affectedversion = ", affectedversion)| fieldsAdd jira_link = concat("[Bugs](",target_url,replaceString(jql, " ", "+"),")")// Define table columns| fields product, version, jira_link
With that query in place, the tile renders a table like the following. Each link in the jira_link column opens Jira filtered to bugs for that specific product and version:
| product | version | jira_link |
|---|---|---|
ada | 1.664.0 | Bugs → |
ada | 1.665.0 | Bugs → |
ada | 1.666.0 | Bugs → |
slo-service | 1.1023.0 | Bugs → |
slo-service | 1.1036.0 | Bugs → |
slo-service | 1.1037.0 | Bugs → |
slo-service | 1.1038.0 | Bugs → |
slo-service | 1.1039.0 | Bugs → |
slo-service | 1.952.0 | Bugs → |