This document explains how to create and use drilldown links based on intents or URLs in
Dashboards or
Notebooks. Drilldown links allow you to navigate across dashboards, notebooks, Dynatrace apps, or external systems while preserving context.
The following options simplify workflows by enabling deeper analysis with just a few clicks, making it easy to investigate issues or explore related data directly from visualizations. In the following, we will leverage and go through use cases to explain the concepts and show how to set things up.
You can drill into related data within Dynatrace or in external systems by passing relevant context. Depending on your use case, you can choose to pass context automatically (using Open with based on intents) or manually (via custom links to dashboards or external systems).
Use automated context passing to investigate data quickly, without needing manual configuration.
For example:
Options for automated context passing:
Use manual context passing if you need to link to external tools or manually configure dashboard or notebook drilldowns.
For example:
Options for manual context passing:
When using these options to link to another dashboard or notebook, the URL format you choose determines whether to open the target in a new tab:
https://<your-environment>/ui/[dashboards|notebooks]/...<your-environment>)/ui/[dashboards|notebooks]/...https://<your-environment>)To navigate between apps in the Dynatrace platform, you can use Open with while preserving context, such as the selected timeframe, entities, or filters. When you select Open with, a window displays a list of actions you can perform in other apps. The available actions depend on whether the target app can work with the data (fields) provided by the source app and which apps are installed in your environment.
You can use Open with at different levels, such as for a section in a notebook, a tile in a dashboard, or even a specific data point or its underlying fields. The further down you go—from tile to data point, or from data point to its underlying fields—the more specific the context becomes, meaning fewer fields are passed to the target app.
For example, if you select a row in a table that contains a dt.smartscape.host field (host ID), and then select Open with, you will see a Go to Host option. This is because the target app, the
Infrastructure & Operations app, can handle the dt.smartscape.host field.
If you're developing Dynatrace apps, see Intents for everything you need to know about passing the user flow from one app to another.
To use Open with with a tile or section
In your dashboard or notebook, select the tiles or sections you want to use in another app. You can select multiple items simultaneously if needed.
Open the menu and select Open with.
In the Open with window, choose an action provided by an app to navigate to while preserving context.
The app opens, processing the context (fields) passed from the tiles or sections. What happens next depends on the action and how the app uses the data.
The following are just a few common ways people use Open with to pass information between Dynatrace apps.
To copy a notebook section to a dashboard (as a dashboard tile)
In the notebook, select the notebook section that you want to copy to a dashboard.
Open the menu and select
Add to dashboard.
In Select destination:
The dashboard opens with the selected section copied into it as a dashboard tile.
To copy a notebook section to a different app (not
Dashboards), open the menu and select Open with, and then select the target app.
To copy a dashboard tile to a notebook (as a notebook section)
In the dashboard, select the tile that you want to copy to a notebook.
Open the menu and select
Add to notebook.
In Select destination:
The notebook opens with the selected tile copied into it as a notebook section.
To copy a dashboard tile to a different app (not
Notebooks), open the menu and select Open with, and then select the target app.
To copy a Grail query from a dashboard to
Workflows as a task in a workflow
In the dashboard, select the query tile that you want to copy to a workflow.
Select > Open with.
In the Open with window, select the Automate DQL Query
Workflows option.
Workflows opens with the selected query added as a workflow task.
Edit the workflow as needed.
Suggested app links are an extension of Open with added to streamline your workflow. Based on the data of your tiles/sections and the data point or fields in your selection, Dynatrace automatically identifies the most relevant action and app combination and adds it directly to the respective menu.
For example, when there is a host ID field in the data, you will see the Go to Host option above the Open with in the menu.
The Add Link feature allows you to create links in the UI directly from your visualizations and navigate to external systems, dashboards, notebooks, or other resources. With it you can:
The Add Link feature allows you to create links directly from your visualizations. These links can navigate to external systems, other Dynatrace apps, or resources, enabling seamless context passing for faster troubleshooting and analysis.
:name placeholder to the your URL like https://myhost/host={{:name}}Use the Links section to manage and organize your links:
Dynamic placeholders allow you to create links that adapt to the data in your visualization. They dynamically populate URLs with context-aware data, such as time ranges, metric values, or entities like hosts.
Depending on your use case, you can use one of three types of placeholders:
Data point placeholders dynamically resolve values based on the specific data point being clicked. These placeholders are especially useful in time-based or segmented visualizations. The following placeholders are available out of the box:
:name: The name of the data point (for example, the series name in a line chart, typically displayed in the legend).:value: The value of the data point (for example, the value at the point clicked on a line chart).:from: The start timestamp of the time slot the value represents (for time-based visualizations).:to: The end timestamp of the time slot the value represents.Example:
In a line chart segmented by host, selecting on a specific data point could resolve the :name placeholder to the host name and the :value placeholder to the metric value at that point in time.
Existing variables let you reference existing variables defined in your dashboard.
Example:
Use $variableName to pass a user-selected value into the link.
Existing fields allow you to reference the full set of data returned in the visualization’s result. Unlike Data point placeholders, which represent a single point of data, Existing Fields provide access to the entire dataset (for example, all points in a series or all column values in a table).
Example:
If a metric query returns an array of values, you can use a field placeholder to reference the entire array.
To use placeholders in your links:
Start typing {{ when editing a URL to display a menu of placeholder suggestions:
{{: Displays all available placeholders.{{$: Displays existing variables.{{:: Displays all data point placholders.Alternatively, select Insert placeholder to choose placeholders from a dropdown menu.
To prevent errors, encoding ensures your URLs work correctly when they include special characters, such as spaces, ampersands, or reserved characters. Neither the static parts of your links nor the dynamic placeholders are encoded automatically, so you need to handle encoding manually to avoid issues.
Static parts of the URL must be manually encoded if they include special characters. For example, replace spaces with %20, ampersands & with %26, and other reserved characters as needed.
Use a free tool like URL Encoder/Decoder to encode your static URLs before pasting them into the URL field.
Dynamic placeholders are not automatically encoded. If your placeholder values may contain special characters, you can use Dynatrace Query Language (DQL) functions to encode them properly. Commonly used DQL functions include:
encodeUrl(): Encodes the entire URL.escape(): Escapes reserved characters.replaceString(): Replaces specific characters (for example, converting + to %20).Example: Encoding a log field to ensure it’s URL-safe:
fetch logs| summarize occurences=count(), by:{content}| fieldsAdd contentEncoded = replaceString(escape(encodeUrl(content)), "+", "%20")| fields contentEncoded, occurences
Status column might use another field's value when navigating.{{:name}} in a line chart segmented by host will replace the placeholder with the respective host name for each series (line).Tables in Dynatrace provide a powerful way to display data and include clickable links for seamless navigation. Links in tables can be added in three levels of complexity:
Basic: auto-detected raw links: automatically display raw URLs as clickable links.
Intermediate: links with a display name: Use markdown column formatting to rename links for better readability.
Advanced: intent-based links: Use Dynatrace Query Language (DQL) to dynamically create intent-based links with encoded parameters for advanced navigation to other apps in Dynatrace.
The following steps walk you through these levels of complexity using a single example that builds progressively.
Dynatrace automatically detects URLs in table cells and renders them as clickable links when the column type of the cell is set to Markdown.
To enable link detection:
Start with a Table Visualization in Dynatrace.
Go to the Visual tab.
In the Columns section, select Column type to add a new column type. Select the column with the raw links and set the column type to Markdown.
Example: Here’s a simple dataset with URLs that you can try on the Dynatrace playground:
data record(website="Dynatrace main page", link="http://www.dynatrace.com"),record(website="Dynatrace community", link="https://community.dynatrace.com/")
To make links more user-friendly, you can provide a display name (for example, "Dynatrace main page") using Markdown formatting. This replaces raw URLs with descriptive labels that are easier for users to read and understand.
To provide user-friendly links:
Adjust your DQL to create a new column that formats links in Markdown syntax.
fieldsAdd function to generate a composite field, for example, markdownLink, in the format [Display Name](URL).concat() function to easily construct such a field (see the following example).Go to the Visual tab.
In the Columns section, select Column type to add a new column type. Select the column with the raw links and set the column type to Markdown. For example, markdownLink.
Example:: Here’s a the dataset with URLs and the markdown notation that you can try on the Dynatrace playground:
data record(website="Dynatrace main page", link="http://www.dynatrace.com"),record(website="Dynatrace community", link="https://community.dynatrace.com/")| fieldsAdd markdownLink = concat("[", website, "](", link, ")")
Intent-based links take link creation to the next level by dynamically passing context (such as error codes, timeframes, or other filters) to other Dynatrace applications for advanced workflows. This is done using Dynatrace Query Language (DQL) and proper URL encoding to handle special characters.
In this section, we’ll walk through generating dynamic intent-based links step by step using DQL. The resulting links will include:
To create intent-based links
Fetch the base data
Use DQL to fetch the relevant dataset and filter content as needed. For example, you can retrieve logs matching specific error codes:
fetch logs| filter matchesPhrase(content, "failed to complete the order: rpc error: code") and status == "ERROR"| parse content, """DATA 'desc = ' LD:errorCode ' '"""| summarize total = count(), by:{errorCode}
Add the base URL of the target app
Define the base URL of the Dynatrace app you’re linking to. In this case, we’re linking logs to the
Logs app:
| fieldsAdd LogAppURL = "/ui/apps/dynatrace.logs/#"
Encode the query components
To create a proper intent-based link, use the encodeUrl() function to encode each part of the URL. Break the query into components for clarity.
Query filter: Filter the logs matching specific error codes:
| fieldsAdd QueryPart1 = """{"version":0,"data":{"queryConfig":{"query":"fetch logs\n| filter matchesPhrase(content,\"\"\""""| fieldsAdd QueryPart1 = encodeUrl(QueryPart1)| fieldsAdd QueryPart1 = replaceString(QueryPart1, "+", "%20")
Dynamic field value: Encode the error codes dynamically:
| fieldsAdd QueryPart2 = escape(errorCode)| fieldsAdd QueryPart2 = encodeUrl(QueryPart2)| fieldsAdd QueryPart2 = replaceString(QueryPart2, "+", "%20")
Timeframe: Encode the dashboard’s timeframe:
| fieldsAdd QueryTimeFrame = """\"\"\") ","timeframe":{"from":$dt_timeframe_from,"to":$dt_timeframe_to},"filter":{"version":"12.2.4","subQueries":[{"id":"A","isEnabled":true,"datatype":"logs","filter":""}],"globalCommands":{"sort":{"field":"timestamp","direction":"desc"}}},"segments":[],"showDqlEditor":true},"tableConfig":{"visibleColumns":["timestamp","status","content"],"columnAttributes":{"columnWidths":{},"lineWraps":{},"tableLineWrap":false},"columnOrder":["timestamp","status","content"]}}}"""
Create the final link. Combine the base URL, the query components, and Markdown formatting into a user-friendly link:
| fieldsAdd errorCodeLink = concat("[", errorCode, "](", LogAppURL, QueryPart1, QueryPart2, QueryTimeFrame, ")")| fields errorCodeLink, total
Try the full example on the Dynatrace playground.