<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Query and transform data on Grafana Labs</title><link>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/</link><description>Recent content in Query and transform data on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/index.xml" rel="self" type="application/rss+xml"/><item><title>Write expression queries</title><link>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/expression-queries/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/expression-queries/</guid><content><![CDATA[&lt;h1 id=&#34;write-expression-queries&#34;&gt;Write expression queries&lt;/h1&gt;
&lt;p&gt;Server-side expressions enable you to manipulate data returned from queries with math and other operations. Expressions create new data and do not manipulate the data returned by data sources.&lt;/p&gt;
&lt;h2 id=&#34;about-expressions&#34;&gt;About expressions&lt;/h2&gt;
&lt;p&gt;Server-side expressions allow you to manipulate data returned from queries with math and other operations. Expressions create new data and do not manipulate the data returned by data sources, aside from some minor data restructuring to make the data acceptable input for expressions.&lt;/p&gt;
&lt;h3 id=&#34;using-expressions&#34;&gt;Using expressions&lt;/h3&gt;
&lt;p&gt;Expressions are most commonly used for 
    &lt;a href=&#34;/docs/grafana/v12.4/alerting/&#34;&gt;Grafana Alerting&lt;/a&gt;. The processing is done server-side, so expressions can operate without a browser session. However, expressions can also be used with backend data sources and visualization.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Expressions do not work with legacy dashboard alerts.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Expressions are meant to augment data sources by enabling queries from different data sources to be combined or by providing operations unavailable in a data source.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;When possible, you should do data processing inside the data source. Copying data from storage to the Grafana server for processing is inefficient, so expressions are targeted at lightweight data processing.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Expressions work with data source queries that return time series or number data. They also operate on 
    &lt;a href=&#34;/docs/grafana/v12.4/fundamentals/timeseries-dimensions/&#34;&gt;multiple-dimensional data&lt;/a&gt;. For example, a query that returns multiple series, where each series is identified by labels or tags.&lt;/p&gt;
&lt;p&gt;An individual expression takes one or more queries or other expressions as input and adds data to the result. Each individual expression or query is represented by a variable that is a named identifier known as its RefID (e.g., the default letter &lt;code&gt;A&lt;/code&gt; or &lt;code&gt;B&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;To reference the output of an individual expression or a data source query in another expression, this identifier is used as a variable.&lt;/p&gt;
&lt;h3 id=&#34;types-of-expressions&#34;&gt;Types of expressions&lt;/h3&gt;
&lt;p&gt;Expressions work with two types of data.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A collection of time series.&lt;/li&gt;
&lt;li&gt;A collection of numbers, where each number is an item.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each collection is returned from a single data source query or expression and represented by the RefID. Each collection is a set, where each item in the set is uniquely identified by its dimensions which are stored as 
    &lt;a href=&#34;/docs/grafana/v12.4/fundamentals/timeseries-dimensions/#labels&#34;&gt;labels&lt;/a&gt; or key-value pairs.&lt;/p&gt;
&lt;h3 id=&#34;data-source-queries&#34;&gt;Data source queries&lt;/h3&gt;
&lt;p&gt;Server-side expressions only support data source queries for backend data sources. The data is generally assumed to be labeled time series data. In the future we intend to add an assertion of the query return type (number or time series) data so expressions can handle errors better.&lt;/p&gt;
&lt;p&gt;Data source queries, when used with expressions, are executed by the expression engine. When it does this, it restructures data to be either one time series or one number per data frame. So for example if using a data source that returns multiple series on one frame in the table view, you might notice it looks different when executed with expressions.&lt;/p&gt;
&lt;p&gt;Currently, the only non-time series format (number) is supported when you&amp;rsquo;re using data frames and you have a table response that returns a data frame with no time, string columns, and one number column:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Loc&lt;/th&gt;
              &lt;th&gt;Host&lt;/th&gt;
              &lt;th&gt;Avg_CPU&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;MIA&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;NYC&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
              &lt;td&gt;2&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The example above will produce a number that works with expressions. The string columns become labels and the number column the corresponding value. For example &lt;code&gt;{&amp;quot;Loc&amp;quot;: &amp;quot;MIA&amp;quot;, &amp;quot;Host&amp;quot;: &amp;quot;A&amp;quot;}&lt;/code&gt; with a value of 1.&lt;/p&gt;
&lt;h3 id=&#34;operations&#34;&gt;Operations&lt;/h3&gt;
&lt;p&gt;You can use the following operations in expressions: math, reduce, and resample.&lt;/p&gt;
&lt;h4 id=&#34;math&#34;&gt;Math&lt;/h4&gt;
&lt;p&gt;Math is for free-form math formulas on time series or number data. Math operations take numbers and time series as input and change them to different numbers and time series.&lt;/p&gt;
&lt;p&gt;Data from other queries or expressions are referenced with the RefID prefixed with a dollar sign, for example &lt;code&gt;$A&lt;/code&gt;. If the variable has spaces in the name, then you can use a brace syntax like &lt;code&gt;${my variable}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Numeric constants may be in decimal (&lt;code&gt;2.24&lt;/code&gt;), octal (with a leading zero like &lt;code&gt;072&lt;/code&gt;), or hex (with a leading 0x like &lt;code&gt;0x2A&lt;/code&gt;). Exponentials and signs are also supported (e.g., &lt;code&gt;-0.8e-2&lt;/code&gt;).&lt;/p&gt;
&lt;h5 id=&#34;operators&#34;&gt;Operators&lt;/h5&gt;
&lt;p&gt;The arithmetic (&lt;code&gt;&#43;&lt;/code&gt;, binary and unary &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;%&lt;/code&gt;, exponent &lt;code&gt;**&lt;/code&gt;), relational (&lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;==&lt;/code&gt;, &lt;code&gt;!=&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt;, &lt;code&gt;&amp;lt;=&lt;/code&gt;), and logical (&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;, &lt;code&gt;||&lt;/code&gt;, and unary &lt;code&gt;!&lt;/code&gt;) operators are supported.&lt;/p&gt;
&lt;p&gt;How the operation behaves with data depends on if it is a number or time series data.&lt;/p&gt;
&lt;p&gt;With binary operations, such as &lt;code&gt;$A &#43; $B&lt;/code&gt; or &lt;code&gt;$A || $B&lt;/code&gt;, the operator is applied in the following ways depending on the type of data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If both &lt;code&gt;$A&lt;/code&gt; and &lt;code&gt;$B&lt;/code&gt; are a number, then the operation is performed between the two numbers.&lt;/li&gt;
&lt;li&gt;If one variable is a number, and the other variable is a time series, then the operation between the value of each point in the time series and the number is performed.&lt;/li&gt;
&lt;li&gt;If both &lt;code&gt;$A&lt;/code&gt; and &lt;code&gt;$B&lt;/code&gt; are time series data, then the operation between each value in the two series is performed for each time stamp that exists in both &lt;code&gt;$A&lt;/code&gt; and &lt;code&gt;$B&lt;/code&gt;. The Resample operation can be used to line up time stamps. (&lt;strong&gt;Note:&lt;/strong&gt; in the future, we plan to add options to the Math operation for different behaviors).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Number OP number = number&lt;/li&gt;
&lt;li&gt;Number OP series = series&lt;/li&gt;
&lt;li&gt;Series OP series = series&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because expressions work with multiple series or numbers represented by a single variable, binary operations also perform a union (join) between the two variables. This is done based on the identifying labels associated with each individual series or number.&lt;/p&gt;
&lt;p&gt;So if you have numbers with labels like &lt;code&gt;{host=web01}&lt;/code&gt; in &lt;code&gt;$A&lt;/code&gt; and another number in &lt;code&gt;$B&lt;/code&gt; with the same labels then the operation is performed between those two items within each variable, and the result will share the same labels. The rules for the behavior of this union are as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An item with no labels will join to anything.&lt;/li&gt;
&lt;li&gt;If both &lt;code&gt;$A&lt;/code&gt; and &lt;code&gt;$B&lt;/code&gt; each contain only one item (one series, or one number), they will join.&lt;/li&gt;
&lt;li&gt;If labels are exact match they will join.&lt;/li&gt;
&lt;li&gt;If labels are a subset of the other, for example and item in &lt;code&gt;$A&lt;/code&gt; is labeled &lt;code&gt;{host=A,dc=MIA}&lt;/code&gt; and item in &lt;code&gt;$B&lt;/code&gt; is labeled &lt;code&gt;{host=A}&lt;/code&gt; they will join.&lt;/li&gt;
&lt;li&gt;Currently, if within a variable such as &lt;code&gt;$A&lt;/code&gt; there are different tag &lt;em&gt;keys&lt;/em&gt; for each item, the join behavior is undefined.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The relational and logical operators return 0 for false 1 for true.&lt;/p&gt;
&lt;h5 id=&#34;math-functions&#34;&gt;Math Functions&lt;/h5&gt;
&lt;p&gt;While most functions exist in the own expression operations, the math operation does have some functions similar to math operators or symbols. When functions can take either numbers or series, than the same type as the argument will be returned. When it is a series, the operation of performed for the value of each point in the series.&lt;/p&gt;
&lt;h6 id=&#34;abs&#34;&gt;abs&lt;/h6&gt;
&lt;p&gt;abs returns the absolute value of its argument which can be a number or a series. For example &lt;code&gt;abs(-1)&lt;/code&gt; or &lt;code&gt;abs($A)&lt;/code&gt;.&lt;/p&gt;
&lt;h6 id=&#34;is_inf&#34;&gt;is_inf&lt;/h6&gt;
&lt;p&gt;is_inf takes a number or a series and returns &lt;code&gt;1&lt;/code&gt; for &lt;code&gt;Inf&lt;/code&gt; values (negative or positive) and &lt;code&gt;0&lt;/code&gt; for other values. For example &lt;code&gt;is_inf($A)&lt;/code&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;If you need to specifically check for negative infinity for example, you can do a comparison like &lt;code&gt;$A == infn()&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h6 id=&#34;is_nan&#34;&gt;is_nan&lt;/h6&gt;
&lt;p&gt;is_nan takes a number or a series and returns &lt;code&gt;1&lt;/code&gt; for &lt;code&gt;NaN&lt;/code&gt; values and &lt;code&gt;0&lt;/code&gt; for other values. For example &lt;code&gt;is_nan($A)&lt;/code&gt;. This function exists because &lt;code&gt;NaN&lt;/code&gt; is not equal to &lt;code&gt;NaN&lt;/code&gt;.&lt;/p&gt;
&lt;h6 id=&#34;is_null&#34;&gt;is_null&lt;/h6&gt;
&lt;p&gt;is_null takes a number or a series and returns &lt;code&gt;1&lt;/code&gt; for &lt;code&gt;null&lt;/code&gt; values and &lt;code&gt;0&lt;/code&gt; for other values. For example &lt;code&gt;is_null($A)&lt;/code&gt;.&lt;/p&gt;
&lt;h6 id=&#34;is_number&#34;&gt;is_number&lt;/h6&gt;
&lt;p&gt;is_number takes a number or a series and returns &lt;code&gt;1&lt;/code&gt; for all real number values and &lt;code&gt;0&lt;/code&gt; for other values (which are &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;Inf&#43;&lt;/code&gt;, &lt;code&gt;Inf-&lt;/code&gt;, and &lt;code&gt;NaN&lt;/code&gt;). For example &lt;code&gt;is_number($A)&lt;/code&gt;.&lt;/p&gt;
&lt;h6 id=&#34;log&#34;&gt;log&lt;/h6&gt;
&lt;p&gt;Log returns the natural logarithm of of its argument which can be a number or a series. If the value is less than 0, NaN is returned. For example &lt;code&gt;log(-1)&lt;/code&gt; or &lt;code&gt;log($A)&lt;/code&gt;.&lt;/p&gt;
&lt;h6 id=&#34;inf-infn-nan-and-null&#34;&gt;inf, infn, nan, and null&lt;/h6&gt;
&lt;p&gt;The inf, infn, nan, and null functions all return a single value of the name. They primarily exist for testing. Example: &lt;code&gt;null()&lt;/code&gt;.&lt;/p&gt;
&lt;h6 id=&#34;round&#34;&gt;round&lt;/h6&gt;
&lt;p&gt;Round returns a rounded integer value. For example, &lt;code&gt;round(3.123)&lt;/code&gt; or &lt;code&gt;round($A)&lt;/code&gt;. (This function should probably take an argument so it can add precision to the rounded value).&lt;/p&gt;
&lt;h6 id=&#34;ceil&#34;&gt;ceil&lt;/h6&gt;
&lt;p&gt;Ceil rounds the number up to the nearest integer value. For example, &lt;code&gt;ceil(3.123)&lt;/code&gt; returns 4.&lt;/p&gt;
&lt;h6 id=&#34;floor&#34;&gt;floor&lt;/h6&gt;
&lt;p&gt;Floor rounds the number down to the nearest integer value. For example, &lt;code&gt;floor(3.123)&lt;/code&gt; returns 3.&lt;/p&gt;
&lt;h4 id=&#34;reduce&#34;&gt;Reduce&lt;/h4&gt;
&lt;p&gt;Reduce takes one or more time series returned from a query or an expression and turns each series into a single number. The labels of the time series are kept as labels on each outputted reduced number.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fields:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Function -&lt;/strong&gt; The reduction function to use&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Input -&lt;/strong&gt; The variable (refID (such as &lt;code&gt;A&lt;/code&gt;)) to resample&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mode -&lt;/strong&gt; Allows control behavior of reduction function when a series contains non-numerical values (null, NaN, &#43;-Inf)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;reduction-functions&#34;&gt;Reduction Functions&lt;/h5&gt;
&lt;h6 id=&#34;count&#34;&gt;Count&lt;/h6&gt;
&lt;p&gt;Count returns the number of points in each series.&lt;/p&gt;
&lt;h6 id=&#34;mean&#34;&gt;Mean&lt;/h6&gt;
&lt;p&gt;Mean returns the total of all values in each series divided by the number of points in that series. In &lt;code&gt;strict&lt;/code&gt; mode if any values in the series are null or nan, or if the series is empty, NaN is returned.&lt;/p&gt;
&lt;h6 id=&#34;min-and-max&#34;&gt;Min and Max&lt;/h6&gt;
&lt;p&gt;Min and Max return the smallest or largest value in the series respectively. In &lt;code&gt;strict&lt;/code&gt; mode if any values in the series are null or nan, or if the series is empty, NaN is returned.&lt;/p&gt;
&lt;h6 id=&#34;sum&#34;&gt;Sum&lt;/h6&gt;
&lt;p&gt;Sum returns the total of all values in the series. If series is of zero length, the sum will be 0. In &lt;code&gt;strict&lt;/code&gt; mode if there are any NaN or Null values in the series, NaN is returned.&lt;/p&gt;
&lt;h5 id=&#34;last&#34;&gt;Last&lt;/h5&gt;
&lt;p&gt;Last returns the last number in the series. If the series has no values then returns NaN.&lt;/p&gt;
&lt;h5 id=&#34;reduction-modes&#34;&gt;Reduction Modes&lt;/h5&gt;
&lt;h6 id=&#34;strict&#34;&gt;Strict&lt;/h6&gt;
&lt;p&gt;In Strict mode the input series is processed as is. If any values in the series are non-numeric (null, NaN or &#43;-Inf), NaN is returned.&lt;/p&gt;
&lt;h6 id=&#34;drop-non-numeric&#34;&gt;Drop Non-Numeric&lt;/h6&gt;
&lt;p&gt;In this mode all non-numeric values (null, NaN or &#43;-Inf) in the input series are filtered out before executing the reduction function.&lt;/p&gt;
&lt;h6 id=&#34;replace-non-numeric&#34;&gt;Replace Non-Numeric&lt;/h6&gt;
&lt;p&gt;In this mode all non-numeric values are replaced by a pre-defined value.&lt;/p&gt;
&lt;h4 id=&#34;resample&#34;&gt;Resample&lt;/h4&gt;
&lt;p&gt;Resample changes the time stamps in each time series to have a consistent time interval. The main use case is so you can resample time series that do not share the same timestamps so math can be performed between them. This can be done by resample each of the two series, and then in a Math operation referencing the resampled variables.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fields:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Input -&lt;/strong&gt; The variable of time series data (refID (such as &lt;code&gt;A&lt;/code&gt;)) to resample&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resample to -&lt;/strong&gt; The duration of time to resample to, for example &lt;code&gt;10s&lt;/code&gt;. Units may be &lt;code&gt;s&lt;/code&gt; seconds, &lt;code&gt;m&lt;/code&gt; for minutes, &lt;code&gt;h&lt;/code&gt; for hours, &lt;code&gt;d&lt;/code&gt; for days, &lt;code&gt;w&lt;/code&gt; for weeks, and &lt;code&gt;y&lt;/code&gt; of years.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Downsample -&lt;/strong&gt; The reduction function to use when there are more than one data point per window sample. See the reduction operation for behavior details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upsample -&lt;/strong&gt; The method to use to fill a window sample that has no data points.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pad&lt;/strong&gt; fills with the last know value&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;backfill&lt;/strong&gt; with next known value&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fillna&lt;/strong&gt; to fill empty sample windows with NaNs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;write-an-expression&#34;&gt;Write an expression&lt;/h2&gt;
&lt;p&gt;If your data source supports them, then Grafana displays the &lt;strong&gt;Expression&lt;/strong&gt; button and shows any existing expressions in the query editor list.&lt;/p&gt;
&lt;p&gt;For more information about expressions, refer to &lt;a href=&#34;#about-expressions&#34;&gt;About expressions&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the panel.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Below the query, click &lt;strong&gt;Expression&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;strong&gt;Operation&lt;/strong&gt; field, select the type of expression you want to write.&lt;/p&gt;
&lt;p&gt;For more information about expression operations, refer to &lt;a href=&#34;#about-expressions&#34;&gt;About expressions&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write the expression.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Apply&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;special-cases&#34;&gt;Special cases&lt;/h2&gt;
&lt;p&gt;When any queried data source returns no series or numbers, the expression engine returns &lt;code&gt;NoData&lt;/code&gt;. For example, if a request contains two data source queries that are merged by an expression, if &lt;code&gt;NoData&lt;/code&gt; is returned by at least one of the data source queries, then the returned result for the entire query is &lt;code&gt;NoData&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For more information about how 
    &lt;a href=&#34;/docs/grafana/v12.4/alerting/&#34;&gt;Grafana Alerting&lt;/a&gt; processes &lt;code&gt;NoData&lt;/code&gt; results, refer to 
    &lt;a href=&#34;/docs/grafana/v12.4/alerting/alerting-rules/create-grafana-managed-rule/#configure-no-data-and-error-handling&#34;&gt;No data and error handling&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the case of using an expression on multiple queries, the expression engine requires that all of the queries return an identical timestamp. For example, if using math to combine the results of multiple SQL queries which each use &lt;code&gt;SELECT NOW() AS &amp;quot;time&amp;quot;&lt;/code&gt;, the expression will only work if all queries evaluate &lt;code&gt;NOW()&lt;/code&gt; to an identical timestamp; which does not always happen. To resolve this, you can replace &lt;code&gt;NOW()&lt;/code&gt; with an arbitrary time, such as &lt;code&gt;SELECT 1 AS &amp;quot;time&amp;quot;&lt;/code&gt;, or any other valid UNIX timestamp.&lt;/p&gt;
]]></content><description>&lt;h1 id="write-expression-queries">Write expression queries&lt;/h1>
&lt;p>Server-side expressions enable you to manipulate data returned from queries with math and other operations. Expressions create new data and do not manipulate the data returned by data sources.&lt;/p></description></item><item><title>SQL expressions</title><link>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/sql-expressions/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/sql-expressions/</guid><content><![CDATA[&lt;h1 id=&#34;sql-expressions&#34;&gt;SQL expressions&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;SQL expressions is currently in &lt;a href=&#34;/docs/release-life-cycle/&#34;&gt;public preview&lt;/a&gt;. Grafana Labs offers limited support, and breaking changes might occur prior to the feature being made generally available.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;


&lt;p&gt;SQL Expressions are server-side expressions that manipulate and transform the results of data source queries using MySQL-like syntax. They allow you to easily query and transform your data after it has been queried, using SQL, which provides a familiar and powerful syntax that can handle everything from simple filters to highly complex, multi-step transformations.&lt;/p&gt;
&lt;p&gt;In Grafana, a server-side expression is a way to transform or calculate data after it has been retrieved from the data source, but before it is sent to the frontend for visualization. Grafana evaluates these expressions on the server, not in the browser or at the data source.&lt;/p&gt;
&lt;p&gt;For general information on Grafana expressions, refer to 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/query-transform-data/expression-queries/&#34;&gt;Write expression queries&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img
  class=&#34;lazyload d-inline-block&#34;
  data-src=&#34;/media/docs/sql-expressions/sql-expressions-example-1.png&#34;
  alt=&#34;Example of a SQL expression&#34; width=&#34;2144&#34;
     height=&#34;1928&#34;/&gt;&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Enable SQL expressions under the feature toggle &lt;code&gt;sqlExpressions&lt;/code&gt;.
&lt;ul&gt;
&lt;li&gt;If you self-host Grafana, you can find feature toggles in the configuration file &lt;code&gt;grafana.ini&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;[feature_toggles]
enable = sqlExpressions&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;If you are using Grafana Cloud, contact &lt;a href=&#34;/help/&#34;&gt;Support&lt;/a&gt; to enable this feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;transform-data-with-sql-expressions&#34;&gt;Transform data with SQL expressions&lt;/h2&gt;
&lt;p&gt;SQL expressions allow you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shape, transform, and modify query results without changing the original query.&lt;/li&gt;
&lt;li&gt;JOIN data from multiple tables.&lt;/li&gt;
&lt;li&gt;Create alerts or recording rules based on transformed data.&lt;/li&gt;
&lt;li&gt;Perform final-stage modifications to datasets, including:
&lt;ul&gt;
&lt;li&gt;Show, hide, or rename columns.&lt;/li&gt;
&lt;li&gt;Filter rows based on conditions.&lt;/li&gt;
&lt;li&gt;Aggregate data (for example: sum, average, count).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Write subqueries and Common Table Expressions (CTEs) to support more complex logic:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Subqueries&lt;/strong&gt; are nested queries used for filtering, calculations, or transformations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CTEs&lt;/strong&gt; are temporary named result sets that help make complex queries more readable and reusable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A key capability of SQL expressions is the ability to JOIN data from multiple tables. This allows users to combine and transform data in a predictable, user-friendly way—even for complex use cases. You can JOIN data from an unlimited number of data source queries.&lt;/p&gt;
&lt;p&gt;To work with SQL expressions, you must use data from a backend data source. In Grafana, a backend data source refers to a data source plugin or integration that communicates with a database, service, or API through the Grafana server, rather than directly from the browser (frontend).&lt;/p&gt;
&lt;h2 id=&#34;compatible-data-sources&#34;&gt;Compatible data sources&lt;/h2&gt;
&lt;p&gt;The following are compatible data sources:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full support:&lt;/strong&gt; Grafana supports all query types for each of these data sources.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Elasticsearch&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Loki&lt;/li&gt;
&lt;li&gt;Graphite&lt;/li&gt;
&lt;li&gt;Google Sheets&lt;/li&gt;
&lt;li&gt;Amazon Athena&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Partial support:&lt;/strong&gt; The following data sources have limited or conditional support. Some support multiple query types depending on the service. For example, Azure Monitor can query multiple services, each with its own query format. In some cases, you can also switch the query type within a panel.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;InfluxDB&lt;/li&gt;
&lt;li&gt;Infinity&lt;/li&gt;
&lt;li&gt;Azure Monitor&lt;/li&gt;
&lt;li&gt;TestData&lt;/li&gt;
&lt;li&gt;Tempo&lt;/li&gt;
&lt;li&gt;Prometheus&lt;/li&gt;
&lt;li&gt;Cloudwatch&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;BigQuery&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;create-sql-expressions&#34;&gt;Create SQL expressions&lt;/h2&gt;
&lt;p&gt;To create a SQL expression, complete the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Dashboards&lt;/strong&gt; in the left-side menu.&lt;/li&gt;
&lt;li&gt;Select a dashboard and open a dashboard panel.&lt;/li&gt;
&lt;li&gt;Click the ellipsis in the upper right and select &lt;strong&gt;Edit&lt;/strong&gt; .&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;&#43; Expression&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;SQL&lt;/strong&gt; from the drop-down.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After you have added a SQL expression, you can select from other data source queries by referencing the RefIDs of the queries in your SQL expression as if they were tables in a SQL database.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The &lt;strong&gt;RefID&lt;/strong&gt; is a unique identifier assigned to each query within a Grafana panel that serves as a reference name for that query&amp;rsquo;s data.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;&lt;img
  class=&#34;lazyload d-inline-block&#34;
  data-src=&#34;/media/docs/sql-expressions/using-the-RefID.png&#34;
  alt=&#34;Using the RefID&#34; width=&#34;2392&#34;
     height=&#34;1646&#34;/&gt;&lt;/p&gt;
&lt;h2 id=&#34;workflow-to-build-sql-expressions&#34;&gt;Workflow to build SQL expressions&lt;/h2&gt;
&lt;p&gt;Use the following workflow to create a SQL expression:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build your base queries.&lt;/strong&gt; Create the individual query and give it a meaningful name. Create the queries (A, B, etc.) that provide the data you want to combine or transform using SQL Expressions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hide your base queries.&lt;/strong&gt; Click the &lt;strong&gt;👁️ Eye icon&lt;/strong&gt; next to each base query to hide them from visualization. This keeps your panel clean while still making the data available to the SQL Expression.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Switch to table view&lt;/strong&gt;. Set the panel visualization to &lt;strong&gt;Table&lt;/strong&gt; to inspect and review the structure and output of your SQL expression as you build and refine it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add a SQL Expression&lt;/strong&gt;. Add a new query and add select SQL Expression as its type.&lt;br /&gt;
&lt;strong&gt;Inspect inputs&lt;/strong&gt;. Start with simple test queries to understand the shape of your input frames.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;SQL&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-sql&#34;&gt;SELECT * FROM A LIMIT 10&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This lets you see the available columns and sample rows from &lt;code&gt;query A&lt;/code&gt;. Repeat this for each input query you want to use (e.g., &lt;code&gt;SELECT * FROM B LIMIT 10&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inspect your data&lt;/strong&gt;. Repeat this for each input query to understand the column structure and data types you&amp;rsquo;re working with.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;SQL&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-sql&#34;&gt;SELECT * FROM &amp;lt;B, C, D, etc&amp;gt; LIMIT 10&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Construct the SQL expression.&lt;/strong&gt; Once you understand your data, you can write your SQL expression to join, filter, or otherwise transform the data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Validate and iterate&lt;/strong&gt;. Click &lt;strong&gt;Refresh&lt;/strong&gt; every time you update your SQL query to re-evaluate and see the updated result.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When selecting a visualization type, &lt;strong&gt;ensure your SQL expression returns data in the required shape&lt;/strong&gt;. For example, time series panels require a column with a time field (e.g., timestamp) and a numeric value column (e.g., __value__). If the output is not shaped correctly, your visualization may appear empty or fail to render.&lt;/p&gt;
&lt;p&gt;The SQL expression workflow in Grafana is designed with the following behaviors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unhidden queries are visualized automatically.&lt;/strong&gt; If an input query is not hidden, Grafana will attempt to render it alongside your SQL expression. This can clutter the output, especially in table visualizations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SQL expression results may not be immediately visible.&lt;/strong&gt; You might need to use the data frame selector (dropdown at the bottom of the table panel) to switch between the raw query and the SQL expression result.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Non-tabular or incorrectly shaped data will not render in certain panels.&lt;/strong&gt; Visualizations such as graphs or gauges require properly structured data. Mismatched formats will result in rendering issues or missing data.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sql-conversion-rules&#34;&gt;SQL conversion rules&lt;/h2&gt;
&lt;p&gt;When you reference a RefID within a SQL statement (e.g., &lt;code&gt;SELECT * FROM A&lt;/code&gt;), the system invokes a distinct SQL conversion process.&lt;/p&gt;
&lt;p&gt;The SQL conversion path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The query result appears as a single data frame, without labels, and is mapped directly to a tabular format.&lt;/li&gt;
&lt;li&gt;If the frame type is present and is either numeric, wide time series, or multi-frame time series (for example: labeled formats), Grafana automatically converts the data into a table structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;supported-functions&#34;&gt;Supported functions&lt;/h2&gt;
&lt;p&gt;Grafana maintains a complete list of supported SQL keywords, operators, and functions in the SQL expressions query validator implementation.&lt;/p&gt;
&lt;p&gt;For the most up-to-date reference of all supported SQL functionality, refer to the &lt;code&gt;allowedNode&lt;/code&gt; and &lt;code&gt;allowedFunction&lt;/code&gt; definitions in the Grafana &lt;a href=&#34;https://github.com/grafana/grafana/blob/main/pkg/expr/sql/parser_allow.go&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;codebase&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;alerting-and-recording-rules&#34;&gt;Alerting and recording rules&lt;/h2&gt;
&lt;p&gt;SQL expressions integrates alerting and recording rules, allowing you to define complex conditions and metrics using standard SQL queries. The system processes your query results and automatically creates alert instances or recorded metrics based on the returned data structure.&lt;/p&gt;
&lt;p&gt;For SQL Expressions to work properly with alerting and recording rules, your query must return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One numeric column - &lt;strong&gt;&lt;em&gt;required&lt;/em&gt;&lt;/strong&gt;. This contains the value that triggers alerts or gets recorded.&lt;/li&gt;
&lt;li&gt;Unique string column combinations - &lt;strong&gt;&lt;em&gt;required&lt;/em&gt;&lt;/strong&gt;. Each row must have a unique combination of string column values.&lt;/li&gt;
&lt;li&gt;One or more string columns - &lt;em&gt;optional&lt;/em&gt;. These become &lt;strong&gt;labels&lt;/strong&gt; for the alert instances or metrics. Examples: &lt;code&gt;service&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Consider the following query results:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;SQL&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-sql&#34;&gt;error_count,service,region
25,auth-service,us-east
0,payment-service,us-west
15,user-service,eu-west&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This query returns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the numeric column &lt;code&gt;error_count&lt;/code&gt; (values: 25, 0, 15)&lt;/li&gt;
&lt;li&gt;the string columns &lt;code&gt;service&lt;/code&gt; and &lt;code&gt;region&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For alert rules, this creates three alert instances:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First instance with labels {service=auth-service, region=us-east} and value 25 (triggers alert - high error count)&lt;/li&gt;
&lt;li&gt;Second instance with labels {service=payment-service, region=us-west} and value 0 (no alert - zero errors)&lt;/li&gt;
&lt;li&gt;Third instance with labels {service=user-service, region=eu-west} and value 15 (triggers alert - elevated error count)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For recording rules, creates one metric with three series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First series: error_count_total{service=auth-service, region=us-east} 25&lt;/li&gt;
&lt;li&gt;Second series: error_count_total{service=payment-service, region=us-west} 0&lt;/li&gt;
&lt;li&gt;Third series: error_count_total{service=user-service, region=eu-west} 15&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Following are some best practices for alerting and recording rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep numeric values meaningful (for example: error counts, request duration).&lt;/li&gt;
&lt;li&gt;Use clear, descriptive column names - these become your labels.&lt;/li&gt;
&lt;li&gt;Keep string values short and consistent.&lt;/li&gt;
&lt;li&gt;Avoid too many unique label combinations, as this can result in high cardinality.&lt;/li&gt;
&lt;li&gt;Always use &lt;code&gt;GROUP BY&lt;/code&gt; to avoid duplicate label errors.&lt;/li&gt;
&lt;li&gt;Aggregate numeric values logically (for example: &lt;code&gt;SUM(error_count)&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;supported-data-source-formats&#34;&gt;Supported data source formats&lt;/h2&gt;
&lt;p&gt;Grafana supports three types of data source response formats:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Single Table-like Frame&lt;/strong&gt;:&lt;br /&gt;
This refers to data returned in a standard tabular structure, where all values are organized into rows and columns, similar to what you&amp;rsquo;d get from a SQL query.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Example&lt;/strong&gt;: Any query against a SQL data source (e.g., PostgreSQL, MySQL) with the format set to Table.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dataplane: Time Series Format&lt;/strong&gt;:&lt;br /&gt;
This format represents time series data with timestamps and associated values. It is typically returned from monitoring data sources.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Example&lt;/strong&gt;: Prometheus or Loki Range Queries (queries that return a set of values over time).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dataplane: Numeric Long Format&lt;/strong&gt;:&lt;br /&gt;
This format is used for point-in-time (instant) metric queries that return a single value (or a set of values) at a specific moment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Example&lt;/strong&gt;: Prometheus or Loki Instant Queries (queries that return the current value of a metric).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For more information on Dataplane formats, refer to &lt;a href=&#34;/developers/dataplane&#34;&gt;Grafana Dataplane Documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following non-tabular formats are automatically converted to a tabular format (&lt;code&gt;FullLong&lt;/code&gt;) when used in SQL expressions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Time Series Wide&lt;/strong&gt;: Label keys become column names.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Time Series Multi&lt;/strong&gt;: Label values become the values in each row (or null if a label is missing).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Numeric Wide&lt;/strong&gt;: The &lt;code&gt;value&lt;/code&gt; column contains the numeric metric value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Numeric Multi&lt;/strong&gt;: If a display name exists, it will appear in the &lt;code&gt;display_name&lt;/code&gt; column.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;During conversion:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Label keys become column names.&lt;/li&gt;
&lt;li&gt;Label values populate the corresponding rows (null if a label is missing).&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;value&lt;/code&gt; column contains the numeric metric.&lt;/li&gt;
&lt;li&gt;If available, the &lt;code&gt;display_name&lt;/code&gt; column contains a human-readable name.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;metric_name&lt;/code&gt; column stores the raw metric identifier.&lt;/li&gt;
&lt;li&gt;For time series data, Grafana includes a &lt;code&gt;time&lt;/code&gt; column with timestamps&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;known-limitations&#34;&gt;Known limitations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Currently, only one SQL expression is supported per panel or alert.&lt;/li&gt;
&lt;li&gt;Grafana supports certain data sources. Refer to &lt;a href=&#34;#compatible-data-sources&#34;&gt;compatible data sources&lt;/a&gt; for a current list.&lt;/li&gt;
&lt;li&gt;Autocomplete is available, but column/field autocomplete is only available after enabling the &lt;code&gt;sqlExpressionsColumnAutoComplete&lt;/code&gt; feature toggle, which is provided on an experimental basis.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;regular-expression-limitations-in-sql-expressions&#34;&gt;Regular expression limitations in SQL expressions&lt;/h3&gt;
&lt;p&gt;SQL expressions depend on a third-party SQL engine that uses &lt;code&gt;cgo&lt;/code&gt; by default for full regular expression compatibility with MySQL. However, Grafana is built without &lt;code&gt;cgo&lt;/code&gt;, which limits regular expression support.&lt;/p&gt;
&lt;p&gt;SQL expressions that use regular expression functions have limitations such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lack of back-references.&lt;/li&gt;
&lt;li&gt;No before/after text matching.&lt;/li&gt;
&lt;li&gt;Differences in handling carriage return (&lt;code&gt;\r&lt;/code&gt;) characters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There may be other minor differences as well.&lt;/p&gt;
&lt;p&gt;For implementation context, refer to the &lt;a href=&#34;https://github.com/grafana/go-mysql-server/blob/main/README.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;go-mysql-server&lt;/code&gt; regular expression compatibility notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;schema-changes-and-missing-data&#34;&gt;Schema changes and missing data&lt;/h3&gt;
&lt;p&gt;SQL expressions have known limitations that may cause queries to fail or return unexpected results. These constraints are inherent to how the feature is implemented and should be understood when building queries.&lt;/p&gt;
&lt;p&gt;The following situations are affected:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Error responses – When a data source query returns an error, SQL expressions cannot interpret the result.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No data responses – If a query returns no rows, the SQL expression engine cannot infer a schema.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dynamic schema responses – If the set of columns or labels changes between query executions, SQL expressions may fail because it treats column changes as schema changes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SQL expressions are powered by an embedded SQL engine where each query result is treated as a table. The schema of that table is derived from the columns returned by the underlying data source.&lt;/p&gt;
&lt;p&gt;Unlike traditional SQL databases, where schemas are usually fixed, many Grafana data sources (for example, Prometheus) can return results with varying label sets or no data at all.&lt;/p&gt;
&lt;p&gt;When this happens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A missing column appears to the SQL engine as if it doesn’t exist.&lt;/li&gt;
&lt;li&gt;A completely empty result provides no schema for subsequent SQL operations.&lt;/li&gt;
&lt;li&gt;Error responses break the assumption that the query returns tabular data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a result, SQL expressions can’t gracefully handle changes in schema or no-data conditions, since these cases violate the static schema model that SQL relies on.&lt;/p&gt;
&lt;h4 id=&#34;workarounds&#34;&gt;Workarounds&lt;/h4&gt;
&lt;p&gt;You can mitigate these issues in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Avoid &lt;code&gt;SELECT *&lt;/code&gt; – Explicitly select only the columns you expect to exist.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensure a consistent schema – If possible, configure your query to always return columns, even when no data is present.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;example-handling-prometheus-no-data&#34;&gt;Example: Handling Prometheus no data&lt;/h4&gt;
&lt;p&gt;When joining results from the same Prometheus query across different data source instances, you can use this pattern:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;SQL&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-sql&#34;&gt;-- Prometheus query
sum by (cluster) (up{job=~&amp;#34;.*zruler.*&amp;#34;})
or on (cluster) (
  (0/0) *
  (
    label_replace(vector(1), &amp;#34;cluster&amp;#34;, &amp;#34;fake&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;&amp;#34;)
  )
)

-- SQL expression
SELECT
    COALESCE(a.time, b.time) AS time,
    COALESCE(a.cluster, b.cluster) AS cluster,
    COALESCE(a.up, 0) &amp;#43; COALESCE(b.up, 0) AS unified_up
FROM (
    SELECT time, cluster, __value__ AS up
    FROM A
    WHERE cluster != &amp;#39;fake&amp;#39;
    ORDER BY time
    LIMIT 5
) a
FULL OUTER JOIN (
    SELECT time, cluster, __value__ AS up
    FROM B
    WHERE cluster != &amp;#39;fake&amp;#39;
    ORDER BY time
    LIMIT 5
) b ON a.time = b.time;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This approach ensures that a schema exists even when one query returns no data.&lt;/p&gt;
&lt;h2 id=&#34;sql-expressions-examples&#34;&gt;SQL expressions examples&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create the following Prometheus query:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;promql&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-promql&#34;&gt;sum(
  rate(go_cpu_classes_gc_total_cpu_seconds_total{namespace=~&amp;#34;.*(namespace).*5.&amp;#34;}[$__rate_interval])
) by (namespace)&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The panel displays the CPU usage by Go garbage collection (GC) over time, broken down by namespace.&lt;/p&gt;
&lt;p&gt;&lt;img
  class=&#34;lazyload d-inline-block&#34;
  data-src=&#34;/media/docs/sql-expressions/sql-expressions-prom-query-example.png&#34;
  alt=&#34;Example using a Prometheus query&#34; width=&#34;686&#34;
     height=&#34;434&#34;/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the SQL expression &lt;code&gt;SELECT * from A&lt;/code&gt;. After you add a SQL expression that selects from RefID A, Grafana converts it to a table response:&lt;/p&gt;
&lt;p&gt;&lt;img
  class=&#34;lazyload d-inline-block&#34;
  data-src=&#34;/media/docs/sql-expressions/add-the-sql-expression.png&#34;
  alt=&#34;Add the SQL expression&#34; width=&#34;684&#34;
     height=&#34;581&#34;/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;llm-integration&#34;&gt;LLM integration&lt;/h2&gt;
&lt;p&gt;The Grafana LLM plugin seamlessly integrates AI-powered assistance into your SQL expressions workflow.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The Grafana LLM plugin is currently in public preview, meaning Grafana offers limited support, and breaking changes might occur prior to the feature being made generally available.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;To use this integration, first &lt;a href=&#34;/grafana/plugins/grafana-llm-app/&#34;&gt;install and configure the LLM plugin&lt;/a&gt;. After installation, open your dashboard and select &lt;strong&gt;Edit&lt;/strong&gt; to open the panel editor. Navigate to the &lt;strong&gt;Queries&lt;/strong&gt; tab and scroll to the bottom where you&amp;rsquo;ll find two new buttons positioned to the right of the &lt;strong&gt;Run query&lt;/strong&gt; button in your SQL Expressions query.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p &#34;
    style=&#34;max-width: 872px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link captioned&#34;
        href=&#34;/media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload mb-0&#34;
          data-src=&#34;/media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png&#34;data-srcset=&#34;/media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png?w=320 320w, /media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png?w=550 550w, /media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png?w=750 750w, /media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png?w=900 900w, /media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png?w=1040 1040w, /media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png?w=1240 1240w, /media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;LLM integration&#34;width=&#34;872&#34;height=&#34;381&#34;title=&#34;LLM integration&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png&#34;
            alt=&#34;LLM integration&#34;width=&#34;872&#34;height=&#34;381&#34;title=&#34;LLM integration&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;figcaption class=&#34;w-100p caption text-gray-13  &#34;&gt;LLM integration&lt;/figcaption&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;Click &lt;strong&gt;Explain query&lt;/strong&gt; to open a drawer that displays a detailed explanation of your query, including its interpreted business meaning and performance statistics. Once the explanation is generated, the button changes to &lt;strong&gt;View explanation&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Click &lt;strong&gt;Improve query&lt;/strong&gt; to open a suggestions drawer that contains performance and reliability enhancements, column naming best practices, and guidance on panel optimization. Click &lt;strong&gt;Apply&lt;/strong&gt; to implement a suggestion. After you’ve interacted with the interface, you&amp;rsquo;ll see a &lt;strong&gt;Suggestions&lt;/strong&gt; button for quick access. Newer suggestions appear at the top, with older ones listed below, creating a history of improvements. If your SQL query has a parsing error, such as a syntax issue, the LLM will attempt to provide a corrected version. The LLM automatically identifies errors and helps you rewrite the query correctly.&lt;/p&gt;
]]></content><description>&lt;h1 id="sql-expressions">SQL expressions&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>SQL expressions is currently in &lt;a href="/docs/release-life-cycle/">public preview&lt;/a>. Grafana Labs offers limited support, and breaking changes might occur prior to the feature being made generally available.&lt;/p></description></item><item><title>Share query results with another panel</title><link>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/share-query/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/share-query/</guid><content><![CDATA[&lt;h1 id=&#34;share-query-results-with-another-panel&#34;&gt;Share query results with another panel&lt;/h1&gt;
&lt;p&gt;Grafana lets you use the query result from one panel for any other panel in the dashboard. Sharing query results across panels reduces the number of queries made to your data source, which can improve the performance of your dashboard.&lt;/p&gt;
&lt;p&gt;The Dashboard data source lets you select a panel in your dashboard that contains the queries ‌you want to share the results for. Instead of sending a separate query for each panel, Grafana sends one query and other panels use the query results to construct visualizations.&lt;/p&gt;
&lt;p&gt;This strategy can drastically reduce the number of queries being made when you for example have several panels visualizing the same data.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
    &lt;a href=&#34;/docs/grafana/v12.4/dashboards/build-dashboards/create-dashboard/&#34;&gt;Create a dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a panel.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the panel title to &amp;ldquo;Source panel&amp;rdquo;. You&amp;rsquo;ll use this panel as a source for the other panels.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Define the 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/query-transform-data/#add-a-query&#34;&gt;query&lt;/a&gt; or queries that you want share.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t have a data source available, use the &lt;strong&gt;Grafana&lt;/strong&gt; data source, which returns a random time series that you can use for testing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a new panel and select the &lt;strong&gt;Dashboard&lt;/strong&gt; data source in the query editor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;strong&gt;Use results from panel list&lt;/strong&gt;, select the first panel you created.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All queries defined in the source panel are now available to the new panel. Queries defined in the source panel can be shared with multiple panels.&lt;/p&gt;
&lt;p&gt;You can click on any of the queries to go to the panel where they are defined.&lt;/p&gt;
]]></content><description>&lt;h1 id="share-query-results-with-another-panel">Share query results with another panel&lt;/h1>
&lt;p>Grafana lets you use the query result from one panel for any other panel in the dashboard. Sharing query results across panels reduces the number of queries made to your data source, which can improve the performance of your dashboard.&lt;/p></description></item><item><title>Transform data</title><link>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/transform-data/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/transform-data/</guid><content><![CDATA[&lt;h1 id=&#34;transform-data&#34;&gt;Transform data&lt;/h1&gt;
&lt;p&gt;Transformations are a powerful way to manipulate data returned by a query before the system applies a visualization. Using transformations, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rename fields&lt;/li&gt;
&lt;li&gt;Join time series/SQL-like data&lt;/li&gt;
&lt;li&gt;Perform mathematical operations across queries&lt;/li&gt;
&lt;li&gt;Use the output of one transformation as the input to another transformation&lt;/li&gt;
&lt;/ul&gt;




&lt;div class=&#34;d-sm-flex flex-direction-row-reverse bg-gray-1 br-12 p-2 my-1&#34;&gt;
  &lt;img class=&#34;maxw-240 w-100p mb-1 lazyload&#34; data-src=&#34;/media/docs/learning-journey/map.svg&#34; width=&#34;237&#34; height=&#34;154&#34; alt=&#34;Grafana Learning Journeys&#34;&gt;
  &lt;div&gt;
    &lt;div class=&#34;h4 pt-0 pb-half fw-500&#34;&gt;Start your learning experience with Grafana Learning Paths&lt;/div&gt;
    &lt;p class=&#34;pr-1 pb-half&#34;&gt;Grafana Learning Paths provide a clear, structured path that leads you from beginner concepts to advanced use cases. Learn about this Grafana feature on &lt;a href=&#34;/docs/learning-journeys/data-transformation/&#34;&gt;Transform data in a Grafana Cloud dashboard&lt;/a&gt;.&lt;/p&gt;
    &lt;div class=&#34;mx-auto&#34;&gt;
      &lt;a class=&#34;btn btn--primary btn--large arrow fw-600 br-8 w-175&#34; href=&#34;https://grafana.com/docs/learning-journeys/data-transformation/&#34;&gt;Start learning&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;For users that rely on multiple views of the same dataset, transformations offer an efficient method of creating and maintaining numerous dashboards.&lt;/p&gt;
&lt;p&gt;You can also use the output of one transformation as the input to another transformation, which results in a performance gain.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sometimes the system cannot graph transformed data. When that happens, click the &lt;code&gt;Table view&lt;/code&gt; toggle above the visualization to switch to a table view of the data. This can help you understand the final result of your transformations.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;transformation-types&#34;&gt;Transformation types&lt;/h2&gt;
&lt;p&gt;Grafana provides a number of ways that you can transform data. For a complete list of transformations, refer to &lt;a href=&#34;#transformation-functions&#34;&gt;Transformation functions&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;order-of-transformations&#34;&gt;Order of transformations&lt;/h2&gt;
&lt;p&gt;When there are multiple transformations, Grafana applies them in the order they are listed. Each transformation creates a result set that then passes on to the next transformation in the processing pipeline.&lt;/p&gt;
&lt;p&gt;The order in which Grafana applies transformations directly impacts the results. For example, if you use a Reduce transformation to condense all the results of one column into a single value, then you can only apply transformations to that single value.&lt;/p&gt;
&lt;h2 id=&#34;dashboard-variables-in-transformations&#34;&gt;Dashboard variables in transformations&lt;/h2&gt;
&lt;p&gt;All text input fields in transformations accept 
    &lt;a href=&#34;/docs/grafana/v12.4/dashboards/variables/&#34;&gt;variable syntax&lt;/a&gt;:&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p &#34;
    style=&#34;max-width: 549px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png&#34;data-srcset=&#34;/media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png?w=320 320w, /media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png?w=550 550w, /media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png?w=750 750w, /media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png?w=900 900w, /media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png?w=1040 1040w, /media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png?w=1240 1240w, /media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;Transformation with a mock variable in a text field&#34;width=&#34;549&#34;height=&#34;234&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/media/docs/grafana/panels-visualizations/screenshot-transformation-variables-v11.6.png&#34;
            alt=&#34;Transformation with a mock variable in a text field&#34;width=&#34;549&#34;height=&#34;234&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;When you use dashboard variables in transformations, the variables are automatically interpolated before the transformations are applied to the data.&lt;/p&gt;
&lt;p&gt;For an example, refer to &lt;a href=&#34;#use-a-dashboard-variable&#34;&gt;Use a dashboard variable&lt;/a&gt; in the &lt;strong&gt;Filter fields by name&lt;/strong&gt; transformation.&lt;/p&gt;
&lt;h2 id=&#34;add-a-transformation-function-to-data&#34;&gt;Add a transformation function to data&lt;/h2&gt;
&lt;p&gt;The following steps guide you in adding a transformation to data. This documentation does not include steps for each type of transformation. For a complete list of transformations, refer to &lt;a href=&#34;#transformation-functions&#34;&gt;Transformation functions&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to the panel where you want to add one or more transformations.&lt;/li&gt;
&lt;li&gt;Hover over any part of the panel to display the actions menu on the top right corner.&lt;/li&gt;
&lt;li&gt;Click the menu and select &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Transform&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Click a transformation.
A transformation row appears where you configure the transformation options. For more information about how to configure a transformation, refer to &lt;a href=&#34;#transformation-functions&#34;&gt;Transformation functions&lt;/a&gt;.
For information about available calculations, refer to 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/query-transform-data/calculation-types/&#34;&gt;Calculation types&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;To apply another transformation, click &lt;strong&gt;Add transformation&lt;/strong&gt;.
This transformation acts on the result set returned by the previous transformation.
&lt;figure
       class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
       style=&#34;max-width: 1100px;&#34;
       itemprop=&#34;associatedMedia&#34;
       itemscope=&#34;&#34;
       itemtype=&#34;http://schema.org/ImageObject&#34;
     &gt;&lt;a
           class=&#34;lightbox-link&#34;
           href=&#34;/static/img/docs/transformations/transformations-7-0.png&#34;
           itemprop=&#34;contentUrl&#34;
         &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
             class=&#34;lazyload &#34;
             data-src=&#34;/static/img/docs/transformations/transformations-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/transformations-7-0.png?w=320 320w, /static/img/docs/transformations/transformations-7-0.png?w=550 550w, /static/img/docs/transformations/transformations-7-0.png?w=750 750w, /static/img/docs/transformations/transformations-7-0.png?w=900 900w, /static/img/docs/transformations/transformations-7-0.png?w=1040 1040w, /static/img/docs/transformations/transformations-7-0.png?w=1240 1240w, /static/img/docs/transformations/transformations-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;Transform tab in the panel editor&#34;width=&#34;1605&#34;height=&#34;354&#34;/&gt;
           &lt;noscript&gt;
             &lt;img
               src=&#34;/static/img/docs/transformations/transformations-7-0.png&#34;
               alt=&#34;Transform tab in the panel editor&#34;width=&#34;1605&#34;height=&#34;354&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
           &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;debug-a-transformation&#34;&gt;Debug a transformation&lt;/h2&gt;
&lt;p&gt;To see the input and the output result sets of the transformation, click the bug icon on the right side of the transformation row.&lt;/p&gt;
&lt;p&gt;The input and output results sets can help you debug a transformation.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/debug-transformations-7-0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/debug-transformations-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/debug-transformations-7-0.png?w=320 320w, /static/img/docs/transformations/debug-transformations-7-0.png?w=550 550w, /static/img/docs/transformations/debug-transformations-7-0.png?w=750 750w, /static/img/docs/transformations/debug-transformations-7-0.png?w=900 900w, /static/img/docs/transformations/debug-transformations-7-0.png?w=1040 1040w, /static/img/docs/transformations/debug-transformations-7-0.png?w=1240 1240w, /static/img/docs/transformations/debug-transformations-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;The debug transformation screen with the debug icon highlighted&#34;width=&#34;1510&#34;height=&#34;762&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/debug-transformations-7-0.png&#34;
            alt=&#34;The debug transformation screen with the debug icon highlighted&#34;width=&#34;1510&#34;height=&#34;762&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h2 id=&#34;disable-a-transformation&#34;&gt;Disable a transformation&lt;/h2&gt;
&lt;p&gt;You can disable or hide one or more transformations by clicking on the eye icon on the top right side of the transformation row. This disables the applied actions of that specific transformation and can help to identify issues when you change several transformations one after another.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/screenshot-example-disable-transformation.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/screenshot-example-disable-transformation.png&#34;data-srcset=&#34;/static/img/docs/transformations/screenshot-example-disable-transformation.png?w=320 320w, /static/img/docs/transformations/screenshot-example-disable-transformation.png?w=550 550w, /static/img/docs/transformations/screenshot-example-disable-transformation.png?w=750 750w, /static/img/docs/transformations/screenshot-example-disable-transformation.png?w=900 900w, /static/img/docs/transformations/screenshot-example-disable-transformation.png?w=1040 1040w, /static/img/docs/transformations/screenshot-example-disable-transformation.png?w=1240 1240w, /static/img/docs/transformations/screenshot-example-disable-transformation.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A transformation row with the disable transformation icon highlighted&#34;width=&#34;1942&#34;height=&#34;170&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/screenshot-example-disable-transformation.png&#34;
            alt=&#34;A transformation row with the disable transformation icon highlighted&#34;width=&#34;1942&#34;height=&#34;170&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h2 id=&#34;filter-a-transformation&#34;&gt;Filter a transformation&lt;/h2&gt;
&lt;p&gt;If your panel uses more than one query, you can filter these and apply the selected transformation to only one of the queries. To do this, click the filter icon on the top right of the transformation row. This opens a drop-down with a list of queries used on the panel. From here, you can select the query you want to transform.&lt;/p&gt;
&lt;p&gt;You can also filter by annotations (which includes exemplars) to apply transformations to them. When you do so, the list of fields changes to reflect those in the annotation or exemplar tooltip.&lt;/p&gt;
&lt;p&gt;The filter icon is always displayed if your panel has more than one query or source of data (that is, panel or annotation data) but it may not work if previous transformations for merging the queries’ outputs are applied. This is because one transformation takes the output of the previous one.&lt;/p&gt;
&lt;h2 id=&#34;delete-a-transformation&#34;&gt;Delete a transformation&lt;/h2&gt;
&lt;p&gt;We recommend that you remove transformations that you don&amp;rsquo;t need. When you delete a transformation, you remove the data from the visualization.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before you begin:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identify all dashboards that rely on the transformation and inform impacted dashboard users.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;To delete a transformation&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open a panel for editing.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Transform&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Click the trash icon next to the transformation you want to delete.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/screenshot-example-remove-transformation.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/screenshot-example-remove-transformation.png&#34;data-srcset=&#34;/static/img/docs/transformations/screenshot-example-remove-transformation.png?w=320 320w, /static/img/docs/transformations/screenshot-example-remove-transformation.png?w=550 550w, /static/img/docs/transformations/screenshot-example-remove-transformation.png?w=750 750w, /static/img/docs/transformations/screenshot-example-remove-transformation.png?w=900 900w, /static/img/docs/transformations/screenshot-example-remove-transformation.png?w=1040 1040w, /static/img/docs/transformations/screenshot-example-remove-transformation.png?w=1240 1240w, /static/img/docs/transformations/screenshot-example-remove-transformation.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A transformation row with the remove transformation icon highlighted&#34;width=&#34;1931&#34;height=&#34;319&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/screenshot-example-remove-transformation.png&#34;
            alt=&#34;A transformation row with the remove transformation icon highlighted&#34;width=&#34;1931&#34;height=&#34;319&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h2 id=&#34;transformation-functions&#34;&gt;Transformation functions&lt;/h2&gt;
&lt;p&gt;You can perform the following transformations on your data.&lt;/p&gt;
&lt;h3 id=&#34;add-field-from-calculation&#34;&gt;Add field from calculation&lt;/h3&gt;
&lt;p&gt;Use this transformation to add a new field calculated from two other fields. Each transformation allows you to add one new field.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mode&lt;/strong&gt; - Select a mode:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduce row&lt;/strong&gt; - Apply selected calculation on each row of selected fields independently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Binary operation&lt;/strong&gt; - Apply basic binary operations (for example, sum or multiply) on values in a single row from two selected fields.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unary operation&lt;/strong&gt; - Apply basic unary operations on values in a single row from a selected field. The available operations are:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Absolute value (abs)&lt;/strong&gt; - Returns the absolute value of a given expression. It represents its distance from zero as a positive number.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Natural exponential (exp)&lt;/strong&gt; - Returns &lt;em&gt;e&lt;/em&gt; raised to the power of a given expression.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Natural logarithm (ln)&lt;/strong&gt; - Returns the natural logarithm of a given expression.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Floor (floor)&lt;/strong&gt; - Returns the largest integer less than or equal to a given expression.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ceiling (ceil)&lt;/strong&gt; - Returns the smallest integer greater than or equal to a given expression.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cumulative functions&lt;/strong&gt; - Apply functions on the current row and all preceding rows.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Total&lt;/strong&gt; - Calculates the cumulative total up to and including the current row.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mean&lt;/strong&gt; - Calculates the mean up to and including the current row.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window functions&lt;/strong&gt; - Apply window functions. The window can either be &lt;strong&gt;trailing&lt;/strong&gt; or &lt;strong&gt;centered&lt;/strong&gt;.
With a trailing window the current row will be the last row in the window.
With a centered window the window will be centered on the current row.
For even window sizes, the window will be centered between the current row, and the previous row.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mean&lt;/strong&gt; - Calculates the moving mean or running average.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stddev&lt;/strong&gt; - Calculates the moving standard deviation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variance&lt;/strong&gt; - Calculates the moving variance.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Row index&lt;/strong&gt; - Insert a field with the row index.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Field name&lt;/strong&gt; - Select the names of fields you want to use in the calculation for the new field.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculation&lt;/strong&gt; - If you select &lt;strong&gt;Reduce row&lt;/strong&gt; mode, then the &lt;strong&gt;Calculation&lt;/strong&gt; field appears. Click in the field to see a list of calculation choices you can use to create the new field. For information about available calculations, refer to 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/query-transform-data/calculation-types/&#34;&gt;Calculation types&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operation&lt;/strong&gt; - If you select &lt;strong&gt;Binary operation&lt;/strong&gt; or &lt;strong&gt;Unary operation&lt;/strong&gt; mode, then the &lt;strong&gt;Operation&lt;/strong&gt; fields appear. These fields allow you to apply basic math operations on values in a single row from selected fields. You can also use numerical values for binary operations.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;All number fields&lt;/strong&gt; - Set the left side of a &lt;strong&gt;Binary operation&lt;/strong&gt; to apply the calculation to all number fields.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;As percentile&lt;/strong&gt; - If you select &lt;strong&gt;Row index&lt;/strong&gt; mode, then the &lt;strong&gt;As percentile&lt;/strong&gt; switch appears. This switch allows you to transform the row index as a percentage of the total number of rows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alias&lt;/strong&gt; - (Optional) Enter the name of your new field. If you leave this blank, then the field will be named to match the calculation.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If a variable is used in this transformation, the default alias will be interpolated with the value of the variable. If you want an alias to be unaffected by variable changes, explicitly define the alias.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Replace all fields&lt;/strong&gt; - (Optional) Select this option if you want to hide all other fields and display only your calculated field in the visualization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the example below, we added two fields together and named them Sum.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png?w=320 320w, /static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png?w=550 550w, /static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png?w=750 750w, /static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png?w=900 900w, /static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png?w=1040 1040w, /static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png?w=1240 1240w, /static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A stat visualization including one field called Sum&#34;width=&#34;1846&#34;height=&#34;962&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/add-field-from-calc-stat-example-7-0.png&#34;
            alt=&#34;A stat visualization including one field called Sum&#34;width=&#34;1846&#34;height=&#34;962&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h3 id=&#34;concatenate-fields&#34;&gt;Concatenate fields&lt;/h3&gt;
&lt;p&gt;Use this transformation to combine all fields from all frames into one result.&lt;/p&gt;
&lt;p&gt;For example, if you have separate queries retrieving temperature and uptime data (Query A) and air quality index and error information (Query B), applying the concatenate transformation yields a consolidated data frame with all relevant information in one view.&lt;/p&gt;
&lt;p&gt;Consider the following:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query A:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Temp&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;15.4&lt;/td&gt;
              &lt;td&gt;1230233&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Query B:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;AQI&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;3.2&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;After you concatenate the fields, the data frame would be:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Temp&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
              &lt;th&gt;AQI&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;15.4&lt;/td&gt;
              &lt;td&gt;1230233&lt;/td&gt;
              &lt;td&gt;3.2&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation simplifies the process of merging data from different sources, providing a comprehensive view for analysis and visualization.&lt;/p&gt;
&lt;h3 id=&#34;config-from-query-results&#34;&gt;Config from query results&lt;/h3&gt;
&lt;p&gt;Use this transformation to select a query and extract standard options, such as &lt;strong&gt;Min&lt;/strong&gt;, &lt;strong&gt;Max&lt;/strong&gt;, &lt;strong&gt;Unit&lt;/strong&gt;, and &lt;strong&gt;Thresholds&lt;/strong&gt;, and apply them to other query results. This feature enables dynamic visualization configuration based on the data returned by a specific query.&lt;/p&gt;
&lt;h4 id=&#34;options&#34;&gt;Options&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Config query&lt;/strong&gt; - Select the query that returns the data you want to use as configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apply to&lt;/strong&gt; - Select the fields or series to which the configuration should be applied.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apply to options&lt;/strong&gt; - Specify a field type or use a field name regex, depending on your selection in &lt;strong&gt;Apply to&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;field-mapping-table&#34;&gt;Field mapping table&lt;/h4&gt;
&lt;p&gt;Below the configuration options, you&amp;rsquo;ll find the field mapping table. This table lists all fields found in the data returned by the config query, along with &lt;strong&gt;Use as&lt;/strong&gt; and &lt;strong&gt;Select&lt;/strong&gt; options. It provides control over mapping fields to config properties, and for multiple rows, it allows you to choose which value to select.&lt;/p&gt;
&lt;h4 id=&#34;example&#34;&gt;Example&lt;/h4&gt;
&lt;p&gt;Input[0] (From query: A, name: ServerA)&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1626178119127&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1626178119129&lt;/td&gt;
              &lt;td&gt;30&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Input[1] (From query: B)&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1626178119127&lt;/td&gt;
              &lt;td&gt;100&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1626178119129&lt;/td&gt;
              &lt;td&gt;100&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Output (Same as Input[0] but now with config on the Value field)&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Value (config: Max=100)&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1626178119127&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1626178119129&lt;/td&gt;
              &lt;td&gt;30&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Each row in the source data becomes a separate field. Each field now has a maximum configuration option set. Options such as &lt;strong&gt;Min&lt;/strong&gt;, &lt;strong&gt;Max&lt;/strong&gt;, &lt;strong&gt;Unit&lt;/strong&gt;, and &lt;strong&gt;Thresholds&lt;/strong&gt; are part of the field configuration. If set, they are used by the visualization instead of any options manually configured in the panel editor options pane.&lt;/p&gt;
&lt;h4 id=&#34;value-mappings&#34;&gt;Value mappings&lt;/h4&gt;
&lt;p&gt;You can also transform a query result into value mappings. With this option, every row in the configuration query result defines a single value mapping row. See the following example.&lt;/p&gt;
&lt;p&gt;Config query result:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Value&lt;/th&gt;
              &lt;th&gt;Text&lt;/th&gt;
              &lt;th&gt;Color&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;L&lt;/td&gt;
              &lt;td&gt;Low&lt;/td&gt;
              &lt;td&gt;blue&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;M&lt;/td&gt;
              &lt;td&gt;Medium&lt;/td&gt;
              &lt;td&gt;green&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;H&lt;/td&gt;
              &lt;td&gt;High&lt;/td&gt;
              &lt;td&gt;red&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;In the field mapping specify:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Field&lt;/th&gt;
              &lt;th&gt;Use as&lt;/th&gt;
              &lt;th&gt;Select&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Value&lt;/td&gt;
              &lt;td&gt;Value mappings / Value&lt;/td&gt;
              &lt;td&gt;All values&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Text&lt;/td&gt;
              &lt;td&gt;Value mappings / Text&lt;/td&gt;
              &lt;td&gt;All values&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Color&lt;/td&gt;
              &lt;td&gt;Value mappings / Color&lt;/td&gt;
              &lt;td&gt;All values&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Grafana builds value mappings from your query result and applies them to the real data query results. You should see values being mapped and colored according to the config query results.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; When you use this transformation for thresholds, the visualization continues to use the panel&amp;rsquo;s base threshold.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;convert-field-type&#34;&gt;Convert field type&lt;/h3&gt;
&lt;p&gt;Use this transformation to modify the field type of a specified field.&lt;/p&gt;
&lt;p&gt;This transformation has the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Field&lt;/strong&gt; - Select from available fields&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;as&lt;/strong&gt; - Select the FieldType to convert to
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Numeric&lt;/strong&gt; - attempts to make the values numbers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;String&lt;/strong&gt; - will make the values strings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Time&lt;/strong&gt; - attempts to parse the values as time
&lt;ul&gt;
&lt;li&gt;The input will be parsed according to the &lt;a href=&#34;https://momentjs.com/docs/#/parsing/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Moment.js parsing format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;It will parse the numeric input as a Unix epoch timestamp in milliseconds.
You must multiply your input by 1000 if it&amp;rsquo;s in seconds.&lt;/li&gt;
&lt;li&gt;Will show an option to specify a DateFormat as input by a string like yyyy-mm-dd or DD MM YYYY hh:mm:ss&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boolean&lt;/strong&gt; - will make the values booleans&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enum&lt;/strong&gt; - will make the values enums
&lt;ul&gt;
&lt;li&gt;Will show a table to manage the enums&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Other&lt;/strong&gt; - attempts to parse the values as JSON&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, consider the following query that could be modified by selecting the time field as Time and specifying Date Format as YYYY.&lt;/p&gt;
&lt;h4 id=&#34;sample-query&#34;&gt;Sample Query&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Mark&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2017-07-01&lt;/td&gt;
              &lt;td&gt;above&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2018-08-02&lt;/td&gt;
              &lt;td&gt;below&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2019-09-02&lt;/td&gt;
              &lt;td&gt;below&lt;/td&gt;
              &lt;td&gt;29&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-10-04&lt;/td&gt;
              &lt;td&gt;above&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The result:&lt;/p&gt;
&lt;h4 id=&#34;transformed-query&#34;&gt;Transformed Query&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Mark&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2017-01-01 00:00:00&lt;/td&gt;
              &lt;td&gt;above&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2018-01-01 00:00:00&lt;/td&gt;
              &lt;td&gt;below&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2019-01-01 00:00:00&lt;/td&gt;
              &lt;td&gt;below&lt;/td&gt;
              &lt;td&gt;29&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-01-01 00:00:00&lt;/td&gt;
              &lt;td&gt;above&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation allows you to flexibly adapt your data types, ensuring compatibility and consistency in your visualizations.&lt;/p&gt;
&lt;h3 id=&#34;extract-fields&#34;&gt;Extract fields&lt;/h3&gt;
&lt;p&gt;Use this transformation to select a source of data and extract content from it in different formats. This transformation has the following fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Source&lt;/strong&gt; - Select the field for the source of data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Format&lt;/strong&gt; - Choose one of the following:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JSON&lt;/strong&gt; - Parse JSON content from the source.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key&#43;value pairs&lt;/strong&gt; - Parse content in the format &amp;lsquo;a=b&amp;rsquo; or &amp;lsquo;c:d&amp;rsquo; from the source.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RegExp&lt;/strong&gt; - Parse content using a regular expression with &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Named_capturing_group&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;named capturing group(s)&lt;/a&gt; like &lt;code&gt;/(?&amp;lt;NewField&amp;gt;.*)/&lt;/code&gt;.
&lt;figure
        class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
        style=&#34;max-width: 1100px;&#34;
        itemprop=&#34;associatedMedia&#34;
        itemscope=&#34;&#34;
        itemtype=&#34;http://schema.org/ImageObject&#34;
      &gt;&lt;a
            class=&#34;lightbox-link&#34;
            href=&#34;/media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png&#34;
            itemprop=&#34;contentUrl&#34;
          &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
              class=&#34;lazyload &#34;
              data-src=&#34;/media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png&#34;data-srcset=&#34;/media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png?w=320 320w, /media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png?w=550 550w, /media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png?w=750 750w, /media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png?w=900 900w, /media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png?w=1040 1040w, /media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png?w=1240 1240w, /media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;Example of a regular expression&#34;width=&#34;500&#34;height=&#34;171&#34;/&gt;
            &lt;noscript&gt;
              &lt;img
                src=&#34;/media/docs/grafana/panels-visualizations/screenshot-regexp-detail-v11.3-2.png&#34;
                alt=&#34;Example of a regular expression&#34;width=&#34;500&#34;height=&#34;171&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
            &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto&lt;/strong&gt; - Discover fields automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Replace All Fields&lt;/strong&gt; - (Optional) Select this option to hide all other fields and display only your calculated field in the visualization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep Time&lt;/strong&gt; - (Optional) Available only if &lt;strong&gt;Replace All Fields&lt;/strong&gt; is true. Keeps the time field in the output.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Consider the following dataset:&lt;/p&gt;
&lt;h4 id=&#34;dataset-example&#34;&gt;Dataset Example&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
              &lt;th&gt;json_data&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678740000000000&lt;/td&gt;
              &lt;td&gt;{&amp;ldquo;value&amp;rdquo;: 1}&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678680000000000&lt;/td&gt;
              &lt;td&gt;{&amp;ldquo;value&amp;rdquo;: 5}&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678620000000000&lt;/td&gt;
              &lt;td&gt;{&amp;ldquo;value&amp;rdquo;: 12}&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;You could prepare the data to be used by a 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/visualizations/time-series/&#34;&gt;Time series panel&lt;/a&gt; with this configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Source: json_data&lt;/li&gt;
&lt;li&gt;Format: JSON
&lt;ul&gt;
&lt;li&gt;Field: value&lt;/li&gt;
&lt;li&gt;Alias: my_value&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Replace all fields: true&lt;/li&gt;
&lt;li&gt;Keep time: true&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This will generate the following output:&lt;/p&gt;
&lt;h4 id=&#34;transformed-data&#34;&gt;Transformed Data&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
              &lt;th&gt;my_value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678740000000000&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678680000000000&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678620000000000&lt;/td&gt;
              &lt;td&gt;12&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation allows you to extract and format data in various ways. You can customize the extraction format based on your specific data needs.&lt;/p&gt;
&lt;h3 id=&#34;lookup-fields-from-resource&#34;&gt;Lookup fields from resource&lt;/h3&gt;
&lt;p&gt;Use this transformation to enrich a field value by looking up additional fields from an external source.&lt;/p&gt;
&lt;p&gt;This transformation has the following fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Field&lt;/strong&gt; - Select a text field from your dataset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lookup&lt;/strong&gt; - Choose from &lt;strong&gt;Countries&lt;/strong&gt;, &lt;strong&gt;USA States&lt;/strong&gt;, and &lt;strong&gt;Airports&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This transformation currently supports spatial data.&lt;/p&gt;
&lt;p&gt;For example, if you have this data:&lt;/p&gt;
&lt;h4 id=&#34;dataset-example-1&#34;&gt;Dataset Example&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Location&lt;/th&gt;
              &lt;th&gt;Values&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;AL&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;AK&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Arizona&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Arkansas&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Somewhere&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;With this configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Field: location&lt;/li&gt;
&lt;li&gt;Lookup: USA States&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&amp;rsquo;ll get the following output:&lt;/p&gt;
&lt;h4 id=&#34;transformed-data-1&#34;&gt;Transformed Data&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Location&lt;/th&gt;
              &lt;th&gt;ID&lt;/th&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Lng&lt;/th&gt;
              &lt;th&gt;Lat&lt;/th&gt;
              &lt;th&gt;Values&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;AL&lt;/td&gt;
              &lt;td&gt;AL&lt;/td&gt;
              &lt;td&gt;Alabama&lt;/td&gt;
              &lt;td&gt;-80.891064&lt;/td&gt;
              &lt;td&gt;12.448457&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;AK&lt;/td&gt;
              &lt;td&gt;AK&lt;/td&gt;
              &lt;td&gt;Arkansas&lt;/td&gt;
              &lt;td&gt;-100.891064&lt;/td&gt;
              &lt;td&gt;24.448457&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Arizona&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Arkansas&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Somewhere&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation lets you augment your data by fetching additional information from external sources, providing a more comprehensive dataset for analysis and visualization.&lt;/p&gt;
&lt;h3 id=&#34;filter-data-by-query-refid&#34;&gt;Filter data by query refId&lt;/h3&gt;
&lt;p&gt;Use this transformation to hide one or more queries in panels that have multiple queries.&lt;/p&gt;
&lt;p&gt;Grafana displays the query identification letters in dark gray text. Click a query identifier to toggle filtering. If the query letter is white, then the results are displayed. If the query letter is dark, then the results are hidden.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This transformation is not available for Graphite because this data source does not support correlating returned data with queries.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;In the example below, the panel has three queries (A, B, C). We removed the B query from the visualization.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/filter-by-query-stat-example-7-0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/filter-by-query-stat-example-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/filter-by-query-stat-example-7-0.png?w=320 320w, /static/img/docs/transformations/filter-by-query-stat-example-7-0.png?w=550 550w, /static/img/docs/transformations/filter-by-query-stat-example-7-0.png?w=750 750w, /static/img/docs/transformations/filter-by-query-stat-example-7-0.png?w=900 900w, /static/img/docs/transformations/filter-by-query-stat-example-7-0.png?w=1040 1040w, /static/img/docs/transformations/filter-by-query-stat-example-7-0.png?w=1240 1240w, /static/img/docs/transformations/filter-by-query-stat-example-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A stat visualization with results from two queries, A and C&#34;width=&#34;1841&#34;height=&#34;672&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/filter-by-query-stat-example-7-0.png&#34;
            alt=&#34;A stat visualization with results from two queries, A and C&#34;width=&#34;1841&#34;height=&#34;672&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h3 id=&#34;filter-data-by-values&#34;&gt;Filter data by values&lt;/h3&gt;
&lt;p&gt;Use this transformation to selectively filter data points directly within your visualization. This transformation provides options to include or exclude data based on one or more conditions applied to a selected field.&lt;/p&gt;
&lt;p&gt;This transformation is very useful if your data source does not natively filter by values. You might also use this to narrow values to display if you are using a shared query.&lt;/p&gt;
&lt;p&gt;The available conditions for all fields are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Is Null&lt;/strong&gt; - Match if the value is null.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is Not Null&lt;/strong&gt; - Match if the value is not null.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Equal&lt;/strong&gt; - Match if the value is equal to the specified value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not Equal&lt;/strong&gt; - Match if the value is not equal to the specified value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regex&lt;/strong&gt; - Match a regex expression.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The available conditions for string fields are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Contains substring&lt;/strong&gt; - Match if the value contains the specified substring (case insensitive).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Does not contain substring&lt;/strong&gt; - Match if the value doesn&amp;rsquo;t contain the specified substring (case insensitive).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The available conditions for number fields are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Greater&lt;/strong&gt; - Match if the value is greater than the specified value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lower&lt;/strong&gt; - Match if the value is lower than the specified value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Greater or equal&lt;/strong&gt; - Match if the value is greater or equal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lower or equal&lt;/strong&gt; - Match if the value is lower or equal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In between&lt;/strong&gt; - Match a range between a specified minimum and maximum, min and max included.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The available conditions for time fields are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;In between&lt;/strong&gt; - Match a range between a specified minimum and maximum. The min and max values will pre-populate with variables to filter by selected time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Consider the following dataset:&lt;/p&gt;
&lt;h4 id=&#34;dataset-example-2&#34;&gt;Dataset Example&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Temperature&lt;/th&gt;
              &lt;th&gt;Altitude&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:23&lt;/td&gt;
              &lt;td&gt;32&lt;/td&gt;
              &lt;td&gt;101&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:22&lt;/td&gt;
              &lt;td&gt;28&lt;/td&gt;
              &lt;td&gt;125&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:21&lt;/td&gt;
              &lt;td&gt;26&lt;/td&gt;
              &lt;td&gt;110&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;23&lt;/td&gt;
              &lt;td&gt;98&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:24&lt;/td&gt;
              &lt;td&gt;31&lt;/td&gt;
              &lt;td&gt;95&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
              &lt;td&gt;85&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;19&lt;/td&gt;
              &lt;td&gt;101&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;If you &lt;strong&gt;Include&lt;/strong&gt; the data points that have a temperature below 30°C, the configuration will look as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filter Type: &amp;lsquo;Include&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Condition: Rows where &amp;lsquo;Temperature&amp;rsquo; matches &amp;lsquo;Lower Than&amp;rsquo; &amp;lsquo;30&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And you will get the following result, where only the temperatures below 30°C are included:&lt;/p&gt;
&lt;h4 id=&#34;transformed-data-2&#34;&gt;Transformed Data&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Temperature&lt;/th&gt;
              &lt;th&gt;Altitude&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:22&lt;/td&gt;
              &lt;td&gt;28&lt;/td&gt;
              &lt;td&gt;125&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:21&lt;/td&gt;
              &lt;td&gt;26&lt;/td&gt;
              &lt;td&gt;110&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;23&lt;/td&gt;
              &lt;td&gt;98&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
              &lt;td&gt;85&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;19&lt;/td&gt;
              &lt;td&gt;101&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;You can add more than one condition to the filter. For example, you might want to include the data only if the altitude is greater than 100. To do so, add that condition to the following configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filter type: &amp;lsquo;Include&amp;rsquo; rows that &amp;lsquo;Match All&amp;rsquo; conditions&lt;/li&gt;
&lt;li&gt;Condition 1: Rows where &amp;lsquo;Temperature&amp;rsquo; matches &amp;lsquo;Lower&amp;rsquo; than &amp;lsquo;30&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Condition 2: Rows where &amp;lsquo;Altitude&amp;rsquo; matches &amp;lsquo;Greater&amp;rsquo; than &amp;lsquo;100&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you have more than one condition, you can choose if you want the action (include/exclude) to be applied on rows that &lt;strong&gt;Match all&lt;/strong&gt; conditions or &lt;strong&gt;Match any&lt;/strong&gt; of the conditions you added.&lt;/p&gt;
&lt;p&gt;In the example above, we chose &lt;strong&gt;Match all&lt;/strong&gt; because we wanted to include the rows that have a temperature lower than 30°C &lt;em&gt;AND&lt;/em&gt; an altitude higher than 100. If we wanted to include the rows that have a temperature lower than 30°C &lt;em&gt;OR&lt;/em&gt; an altitude higher than 100 instead, then we would select &lt;strong&gt;Match any&lt;/strong&gt;. This would include the first row in the original data, which has a temperature of 32°C (does not match the first condition) but an altitude of 101 (which matches the second condition), so it is included.&lt;/p&gt;
&lt;p&gt;Conditions that are invalid or incompletely configured are ignored.&lt;/p&gt;
&lt;p&gt;This versatile data filtering transformation lets you to selectively include or exclude data points based on specific conditions. Customize the criteria to tailor your data presentation to meet your unique analytical needs.&lt;/p&gt;
&lt;h3 id=&#34;filter-fields-by-name&#34;&gt;Filter fields by name&lt;/h3&gt;
&lt;p&gt;Use this transformation to selectively remove parts of your query results. There are three ways to filter field names:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#use-a-regular-expression&#34;&gt;Using a regular expression&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#manually-select-included-fields&#34;&gt;Manually selecting included fields&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#use-a-dashboard-variable&#34;&gt;Using a dashboard variable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;use-a-regular-expression&#34;&gt;Use a regular expression&lt;/h4&gt;
&lt;p&gt;When you filter using a regular expression, field names that match the regular expression are included.&lt;/p&gt;
&lt;p&gt;For example, from the input data:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;dev-eu-west&lt;/th&gt;
              &lt;th&gt;dev-eu-north&lt;/th&gt;
              &lt;th&gt;prod-eu-west&lt;/th&gt;
              &lt;th&gt;prod-eu-north&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-03-04 23:56:23&lt;/td&gt;
              &lt;td&gt;23.5&lt;/td&gt;
              &lt;td&gt;24.5&lt;/td&gt;
              &lt;td&gt;22.2&lt;/td&gt;
              &lt;td&gt;20.2&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-03-04 23:56:23&lt;/td&gt;
              &lt;td&gt;23.6&lt;/td&gt;
              &lt;td&gt;24.4&lt;/td&gt;
              &lt;td&gt;22.1&lt;/td&gt;
              &lt;td&gt;20.1&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The result from using the regular expression &amp;lsquo;prod.*&amp;rsquo; would be:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;prod-eu-west&lt;/th&gt;
              &lt;th&gt;prod-eu-north&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-03-04 23:56:23&lt;/td&gt;
              &lt;td&gt;22.2&lt;/td&gt;
              &lt;td&gt;20.2&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-03-04 23:56:23&lt;/td&gt;
              &lt;td&gt;22.1&lt;/td&gt;
              &lt;td&gt;20.1&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The regular expression can include an interpolated dashboard variable by using the ${variableName} syntax.&lt;/p&gt;
&lt;h4 id=&#34;manually-select-included-fields&#34;&gt;Manually select included fields&lt;/h4&gt;
&lt;p&gt;Click and uncheck the field names to remove them from the result. Fields that are matched by the regular expression are still included, even if they&amp;rsquo;re unchecked.&lt;/p&gt;
&lt;h4 id=&#34;use-a-dashboard-variable&#34;&gt;Use a dashboard variable&lt;/h4&gt;
&lt;p&gt;Enable &amp;lsquo;From variable&amp;rsquo; to let you select a dashboard variable that&amp;rsquo;s used to include fields. By setting up a 
    &lt;a href=&#34;/docs/grafana/v12.4/dashboards/variables/&#34;&gt;dashboard variable&lt;/a&gt; with multiple choices, the same fields can be displayed across multiple visualizations.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/filter-name-table-before-7-0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/filter-name-table-before-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/filter-name-table-before-7-0.png?w=320 320w, /static/img/docs/transformations/filter-name-table-before-7-0.png?w=550 550w, /static/img/docs/transformations/filter-name-table-before-7-0.png?w=750 750w, /static/img/docs/transformations/filter-name-table-before-7-0.png?w=900 900w, /static/img/docs/transformations/filter-name-table-before-7-0.png?w=1040 1040w, /static/img/docs/transformations/filter-name-table-before-7-0.png?w=1240 1240w, /static/img/docs/transformations/filter-name-table-before-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A table visualization with time, value, Min, and Max columns&#34;width=&#34;1181&#34;height=&#34;338&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/filter-name-table-before-7-0.png&#34;
            alt=&#34;A table visualization with time, value, Min, and Max columns&#34;width=&#34;1181&#34;height=&#34;338&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;Here&amp;rsquo;s the table after we applied the transformation to remove the Min field.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/filter-name-table-after-7-0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/filter-name-table-after-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/filter-name-table-after-7-0.png?w=320 320w, /static/img/docs/transformations/filter-name-table-after-7-0.png?w=550 550w, /static/img/docs/transformations/filter-name-table-after-7-0.png?w=750 750w, /static/img/docs/transformations/filter-name-table-after-7-0.png?w=900 900w, /static/img/docs/transformations/filter-name-table-after-7-0.png?w=1040 1040w, /static/img/docs/transformations/filter-name-table-after-7-0.png?w=1240 1240w, /static/img/docs/transformations/filter-name-table-after-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A table visualization with time, value, and Max columns&#34;width=&#34;1545&#34;height=&#34;680&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/filter-name-table-after-7-0.png&#34;
            alt=&#34;A table visualization with time, value, and Max columns&#34;width=&#34;1545&#34;height=&#34;680&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;Here is the same query using a Stat visualization.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/filter-name-stat-after-7-0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/filter-name-stat-after-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/filter-name-stat-after-7-0.png?w=320 320w, /static/img/docs/transformations/filter-name-stat-after-7-0.png?w=550 550w, /static/img/docs/transformations/filter-name-stat-after-7-0.png?w=750 750w, /static/img/docs/transformations/filter-name-stat-after-7-0.png?w=900 900w, /static/img/docs/transformations/filter-name-stat-after-7-0.png?w=1040 1040w, /static/img/docs/transformations/filter-name-stat-after-7-0.png?w=1240 1240w, /static/img/docs/transformations/filter-name-stat-after-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A stat visualization with value and Max fields&#34;width=&#34;1830&#34;height=&#34;730&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/filter-name-stat-after-7-0.png&#34;
            alt=&#34;A stat visualization with value and Max fields&#34;width=&#34;1830&#34;height=&#34;730&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;This transformation provides flexibility in tailoring your query results to focus on the specific fields you need for effective analysis and visualization.&lt;/p&gt;
&lt;h3 id=&#34;format-string&#34;&gt;Format string&lt;/h3&gt;
&lt;p&gt;Use this transformation to customize the output of a string field. This transformation has the following fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Upper case&lt;/strong&gt; - Formats the entire string in uppercase characters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lower case&lt;/strong&gt; - Formats the entire string in lowercase characters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sentence case&lt;/strong&gt; - Formats the first character of the string in uppercase.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Title case&lt;/strong&gt; - Formats the first character of each word in the string in uppercase.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pascal case&lt;/strong&gt; - Formats the first character of each word in the string in uppercase and doesn&amp;rsquo;t include spaces between words.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Camel case&lt;/strong&gt; - Formats the first character of each word in the string in uppercase, except the first word, and doesn&amp;rsquo;t include spaces between words.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snake case&lt;/strong&gt; - Formats all characters in the string in lowercase and uses underscores instead of spaces between words.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kebab case&lt;/strong&gt; - Formats all characters in the string in lowercase and uses dashes instead of spaces between words.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trim&lt;/strong&gt; - Removes all leading and trailing spaces from the string.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Substring&lt;/strong&gt; - Returns a substring of the string, using the specified start and end positions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This transformation provides a convenient way to standardize and tailor the presentation of string data for better visualization and analysis.&lt;/p&gt;
&lt;h3 id=&#34;format-time&#34;&gt;Format time&lt;/h3&gt;
&lt;p&gt;Use this transformation to customize the output of a time field. Output can be formatted using &lt;a href=&#34;https://momentjs.com/docs/#/displaying/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Moment.js format strings&lt;/a&gt;. For example, if you want to display only the year of a time field, the format string &amp;lsquo;YYYY&amp;rsquo; can be used to show the calendar year (for example, 1999 or 2012).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before Transformation:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
              &lt;th&gt;Event&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678740000000000&lt;/td&gt;
              &lt;td&gt;System Start&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678680000000000&lt;/td&gt;
              &lt;td&gt;User Login&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1636678620000000000&lt;/td&gt;
              &lt;td&gt;Data Updated&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;After applying &amp;lsquo;YYYY-MM-DD HH:mm:ss&amp;rsquo;:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
              &lt;th&gt;Event&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2021-11-12 14:25:40&lt;/td&gt;
              &lt;td&gt;System Start&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2021-11-12 14:24:40&lt;/td&gt;
              &lt;td&gt;User Login&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2021-11-12 14:23:40&lt;/td&gt;
              &lt;td&gt;Data Updated&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation lets you tailor the time representation in your visualizations, providing flexibility and precision in displaying temporal data.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This transformation is available in Grafana 10.1&#43; as an alpha feature.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;group-by&#34;&gt;Group by&lt;/h3&gt;
&lt;p&gt;Use this transformation to group the data by a specified field (column) value and process calculations on each group. Click to see a list of calculation choices. For information about available calculations, refer to 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/query-transform-data/calculation-types/&#34;&gt;Calculation types&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example of original data.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;CPU Temperature&lt;/th&gt;
              &lt;th&gt;Server Status&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
              &lt;td&gt;Shutdown&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;62&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;90&lt;/td&gt;
              &lt;td&gt;Overload&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;55&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;62&lt;/td&gt;
              &lt;td&gt;Rebooting&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:28:06&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:25:05&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:23:07&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;86&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation goes in two steps. First you specify one or multiple fields to group the data by. This will group all the same values of those fields together, as if you sorted them. For instance if we group by the Server ID field, then it would group the data this way:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;CPU Temperature&lt;/th&gt;
              &lt;th&gt;Server Status&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;&lt;strong&gt;server 1&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
              &lt;td&gt;Shutdown&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:28:06&lt;/td&gt;
              &lt;td&gt;&lt;strong&gt;server 1&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:23:07&lt;/td&gt;
              &lt;td&gt;&lt;strong&gt;server 1&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;86&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;90&lt;/td&gt;
              &lt;td&gt;Overload&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:25:05&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;&lt;strong&gt;&lt;em&gt;server 3&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;62&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;&lt;strong&gt;&lt;em&gt;server 3&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;55&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;&lt;strong&gt;&lt;em&gt;server 3&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;62&lt;/td&gt;
              &lt;td&gt;Rebooting&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;All rows with the same value of Server ID are grouped together. Optionally, you can add a count of how may values fall in the selected group.&lt;/p&gt;
&lt;p&gt;After choosing which field you want to group your data by, you can add various calculations on the other fields, and apply the calculation to each group of rows. For instance, we could want to calculate the average CPU temperature for each of those servers. So we can add the &lt;em&gt;mean&lt;/em&gt; calculation applied on the CPU Temperature field to get the following:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;CPU Temperature (mean)&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;82&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88.6&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;59.6&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;If you had added the count stat to the group by transformation, there would be an extra column showing that the count of each server from above was 3.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;CPU Temperature (mean)&lt;/th&gt;
              &lt;th&gt;Server ID (count)&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;82&lt;/td&gt;
              &lt;td&gt;3&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88.6&lt;/td&gt;
              &lt;td&gt;3&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;59.6&lt;/td&gt;
              &lt;td&gt;3&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;And we can add more than one calculation. For instance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For field Time, we can calculate the &lt;em&gt;Last&lt;/em&gt; value, to know when the last data point was received for each server&lt;/li&gt;
&lt;li&gt;For field Server Status, we can calculate the &lt;em&gt;Last&lt;/em&gt; value to know what is the last state value for each server&lt;/li&gt;
&lt;li&gt;For field Temperature, we can also calculate the &lt;em&gt;Last&lt;/em&gt; value to know what is the latest monitored temperature for each server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We would then get:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;CPU Temperature (mean)&lt;/th&gt;
              &lt;th&gt;CPU Temperature (last)&lt;/th&gt;
              &lt;th&gt;Time (last)&lt;/th&gt;
              &lt;th&gt;Server Status (last)&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;82&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Shutdown&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88.6&lt;/td&gt;
              &lt;td&gt;90&lt;/td&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;Overload&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;59.6&lt;/td&gt;
              &lt;td&gt;62&lt;/td&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation allows you to extract essential information from your time series and present it conveniently.&lt;/p&gt;
&lt;h3 id=&#34;grouping-to-matrix&#34;&gt;Grouping to matrix&lt;/h3&gt;
&lt;p&gt;Use this transformation to combine three fields—which are used as input for the &lt;strong&gt;Column&lt;/strong&gt;, &lt;strong&gt;Row&lt;/strong&gt;, and &lt;strong&gt;Cell value&lt;/strong&gt; fields from the query output—and generate a matrix. The matrix is calculated as follows:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Original data&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;CPU Temperature&lt;/th&gt;
              &lt;th&gt;Server Status&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;82&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88.6&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;59.6&lt;/td&gt;
              &lt;td&gt;Shutdown&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;We can generate a matrix using the values of &amp;lsquo;Server Status&amp;rsquo; as column names, the &amp;lsquo;Server ID&amp;rsquo; values as row names, and the &amp;lsquo;CPU Temperature&amp;rsquo; as content of each cell. The content of each cell will appear for the existing column (&amp;lsquo;Server Status&amp;rsquo;) and row combination (&amp;lsquo;Server ID&amp;rsquo;). For the rest of the cells, you can select which value to display between: &lt;strong&gt;Null&lt;/strong&gt;, &lt;strong&gt;True&lt;/strong&gt;, &lt;strong&gt;False&lt;/strong&gt;, or &lt;strong&gt;Empty&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Server IDServer Status&lt;/th&gt;
              &lt;th&gt;OK&lt;/th&gt;
              &lt;th&gt;Shutdown&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;82&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88.6&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;59.6&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Use this transformation to construct a matrix by specifying fields from your query results. The matrix output reflects the relationships between the unique values in these fields. This helps you present complex relationships in a clear and structured matrix format.&lt;/p&gt;
&lt;h3 id=&#34;group-to-nested-tables&#34;&gt;Group to nested tables&lt;/h3&gt;
&lt;p&gt;Use this transformation to group the data by a specified field (column) value and process calculations on each group. Records are generated that share the same grouped field value, to be displayed in a nested table.&lt;/p&gt;
&lt;p&gt;To calculate a statistic for a field, click the selection box next to it and select the &lt;strong&gt;Calculate&lt;/strong&gt; option:&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/nested-table-select-calculation.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/nested-table-select-calculation.png&#34;data-srcset=&#34;/static/img/docs/transformations/nested-table-select-calculation.png?w=320 320w, /static/img/docs/transformations/nested-table-select-calculation.png?w=550 550w, /static/img/docs/transformations/nested-table-select-calculation.png?w=750 750w, /static/img/docs/transformations/nested-table-select-calculation.png?w=900 900w, /static/img/docs/transformations/nested-table-select-calculation.png?w=1040 1040w, /static/img/docs/transformations/nested-table-select-calculation.png?w=1240 1240w, /static/img/docs/transformations/nested-table-select-calculation.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A select box showing the Group and Calculate options for the transformation.&#34;width=&#34;526&#34;height=&#34;230&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/nested-table-select-calculation.png&#34;
            alt=&#34;A select box showing the Group and Calculate options for the transformation.&#34;width=&#34;526&#34;height=&#34;230&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;Once &lt;strong&gt;Calculate&lt;/strong&gt; has been selected, another selection box will appear next to the respective field which will allow statistics to be selected:&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/nested-table-select-stat.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/nested-table-select-stat.png&#34;data-srcset=&#34;/static/img/docs/transformations/nested-table-select-stat.png?w=320 320w, /static/img/docs/transformations/nested-table-select-stat.png?w=550 550w, /static/img/docs/transformations/nested-table-select-stat.png?w=750 750w, /static/img/docs/transformations/nested-table-select-stat.png?w=900 900w, /static/img/docs/transformations/nested-table-select-stat.png?w=1040 1040w, /static/img/docs/transformations/nested-table-select-stat.png?w=1240 1240w, /static/img/docs/transformations/nested-table-select-stat.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A select box showing available statistic calculations once the calculate option for the field has been selected.&#34;width=&#34;1802&#34;height=&#34;410&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/nested-table-select-stat.png&#34;
            alt=&#34;A select box showing available statistic calculations once the calculate option for the field has been selected.&#34;width=&#34;1802&#34;height=&#34;410&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;For information about available calculations, refer to 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/query-transform-data/calculation-types/&#34;&gt;Calculation types&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example of original data:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;CPU Temperature&lt;/th&gt;
              &lt;th&gt;Server Status&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
              &lt;td&gt;Shutdown&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;62&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;90&lt;/td&gt;
              &lt;td&gt;Overload&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;55&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;62&lt;/td&gt;
              &lt;td&gt;Rebooting&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:28:06&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:25:05&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:23:07&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;86&lt;/td&gt;
              &lt;td&gt;OK&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation has two steps. First, specify one or more fields by which to group the data. This groups all the same values of those fields together, as if you sorted them. For instance, if you group by the Server ID field, Grafana groups the data this way:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;&lt;table&gt;&lt;th&gt;&lt;tr&gt;&lt;td&gt;Time&lt;/td&gt;&lt;td&gt;CPU Temperature&lt;/td&gt;&lt;td&gt;Server Status&lt;/td&gt;&lt;/tr&gt;&lt;/th&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;Shutdown&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:28:06&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:23:07&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;&lt;table&gt;&lt;th&gt;&lt;tr&gt;&lt;td&gt;Time&lt;/td&gt;&lt;td&gt;CPU Temperature&lt;/td&gt;&lt;td&gt;Server Status&lt;/td&gt;&lt;/tr&gt;&lt;/th&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;Overload&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;&lt;td&gt;88&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:25:05&lt;/td&gt;&lt;td&gt;88&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;&lt;table&gt;&lt;th&gt;&lt;tr&gt;&lt;td&gt;Time&lt;/td&gt;&lt;td&gt;CPU Temperature&lt;/td&gt;&lt;td&gt;Server Status&lt;/td&gt;&lt;/tr&gt;&lt;/th&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;Rebooting&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;After choosing the field by which you want to group your data, you can add various calculations on the other fields and apply the calculation to each group of rows. For instance, you might want to calculate the average CPU temperature for each of those servers. To do so, add the &lt;strong&gt;mean calculation&lt;/strong&gt; applied on the CPU Temperature field to get the following result:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Server ID&lt;/th&gt;
              &lt;th&gt;CPU Temperatute (mean)&lt;/th&gt;
              &lt;th&gt;&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;82&lt;/td&gt;
              &lt;td&gt;&lt;table&gt;&lt;th&gt;&lt;tr&gt;&lt;td&gt;Time&lt;/td&gt;&lt;td&gt;Server Status&lt;/td&gt;&lt;/tr&gt;&lt;/th&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;&lt;td&gt;Shutdown&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:28:06&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:23:07&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;88.6&lt;/td&gt;
              &lt;td&gt;&lt;table&gt;&lt;th&gt;&lt;tr&gt;&lt;td&gt;Time&lt;/td&gt;&lt;td&gt;Server Status&lt;/td&gt;&lt;/tr&gt;&lt;/th&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;&lt;td&gt;Overload&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:25:05&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;59.6&lt;/td&gt;
              &lt;td&gt;&lt;table&gt;&lt;th&gt;&lt;tr&gt;&lt;td&gt;Time&lt;/td&gt;&lt;td&gt;Server Status&lt;/td&gt;&lt;/tr&gt;&lt;/th&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;&lt;td&gt;Rebooting&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;create-heatmap&#34;&gt;Create heatmap&lt;/h3&gt;
&lt;p&gt;Use this transformation to prepare histogram data for visualizing trends over time. Similar to the heatmap visualization, this transformation converts histogram metrics into temporal buckets.&lt;/p&gt;
&lt;h4 id=&#34;x-bucket&#34;&gt;X Bucket&lt;/h4&gt;
&lt;p&gt;This setting determines how the x-axis is split into buckets.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Size&lt;/strong&gt; - Specify a time interval in the input field. For example, a time range of &amp;lsquo;1h&amp;rsquo; creates cells one hour wide on the x-axis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Count&lt;/strong&gt; - For non-time-related series, use this option to define the number of elements in a bucket.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;y-bucket&#34;&gt;Y Bucket&lt;/h4&gt;
&lt;p&gt;This setting determines how the y-axis is split into buckets.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logarithmic&lt;/strong&gt; - Choose between log base 2 or log base 10.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Symlog&lt;/strong&gt; - Uses a symmetrical logarithmic scale. Choose between log base 2 or log base 10, allowing for negative values.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Assume you have the following dataset:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 12:00:00&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 12:15:00&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 12:30:00&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 12:45:00&lt;/td&gt;
              &lt;td&gt;8&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;ul&gt;
&lt;li&gt;With X Bucket set to &amp;lsquo;Size: 15m&amp;rsquo; and Y Bucket as &amp;lsquo;Linear&amp;rsquo;, the histogram organizes values into time intervals of 15 minutes on the x-axis and linearly on the y-axis.&lt;/li&gt;
&lt;li&gt;For X Bucket as &amp;lsquo;Count: 2&amp;rsquo; and Y Bucket as &amp;lsquo;Logarithmic (base 10)&amp;rsquo;, the histogram groups values into buckets of two on the x-axis and use a logarithmic scale on the y-axis.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;histogram&#34;&gt;Histogram&lt;/h3&gt;
&lt;p&gt;Use this transformation to generate a histogram based on input data, allowing you to visualize the distribution of values.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bucket size&lt;/strong&gt; - The range between the lowest and highest items in a bucket (xMin to xMax).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bucket offset&lt;/strong&gt; - The offset for non-zero-based buckets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Combine series&lt;/strong&gt; - Create a unified histogram using all available series.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Original data&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Series 1:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;A&lt;/th&gt;
              &lt;th&gt;B&lt;/th&gt;
              &lt;th&gt;C&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;4&lt;/td&gt;
              &lt;td&gt;6&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;7&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;4&lt;/td&gt;
              &lt;td&gt;6&lt;/td&gt;
              &lt;td&gt;8&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;7&lt;/td&gt;
              &lt;td&gt;9&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Series 2:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;C&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;6&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;7&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;8&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;9&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;xMin&lt;/th&gt;
              &lt;th&gt;xMax&lt;/th&gt;
              &lt;th&gt;A&lt;/th&gt;
              &lt;th&gt;B&lt;/th&gt;
              &lt;th&gt;C&lt;/th&gt;
              &lt;th&gt;C&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;4&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;4&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;6&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;6&lt;/td&gt;
              &lt;td&gt;7&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;7&lt;/td&gt;
              &lt;td&gt;8&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;8&lt;/td&gt;
              &lt;td&gt;9&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;9&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;0&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Visualize the distribution of values using the generated histogram, providing insights into the data&amp;rsquo;s spread and density.&lt;/p&gt;
&lt;h3 id=&#34;join-by-field&#34;&gt;Join by field&lt;/h3&gt;
&lt;p&gt;Use this transformation to merge multiple results into a single table, enabling the consolidation of data from different queries.&lt;/p&gt;
&lt;p&gt;This is especially useful for converting multiple time series results into a single wide table with a shared time field.&lt;/p&gt;
&lt;h4 id=&#34;inner-join-for-time-series-or-sql-like-data&#34;&gt;Inner join (for Time Series or SQL-like data)&lt;/h4&gt;
&lt;p&gt;An inner join merges data from multiple tables where all tables share the same value from the selected field. This type of join excludes data where values do not match in every result.&lt;/p&gt;
&lt;p&gt;Use this transformation to combine the results from multiple queries (combining on a passed join field or the first time column) into one result, and drop rows where a successful join cannot occur. This is not optimized for large Time Series datasets.&lt;/p&gt;
&lt;p&gt;In the following example, two queries return Time Series data. It is visualized as two separate tables before applying the inner join transformation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query A:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Job&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;node&lt;/td&gt;
              &lt;td&gt;25260122&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;123001233&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:14:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;345001233&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Query B:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Server&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:04:20&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The result after applying the inner join transformation looks like the following:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Job&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
              &lt;th&gt;Server&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;node&lt;/td&gt;
              &lt;td&gt;25260122&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;123001233&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This works in the same way for non-Time Series tabular data as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Students&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;StudentID&lt;/th&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Major&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;John&lt;/td&gt;
              &lt;td&gt;Computer Science&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;Emily&lt;/td&gt;
              &lt;td&gt;Mathematics&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;Michael&lt;/td&gt;
              &lt;td&gt;Physics&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;4&lt;/td&gt;
              &lt;td&gt;Jennifer&lt;/td&gt;
              &lt;td&gt;Chemistry&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Enrollments&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;StudentID&lt;/th&gt;
              &lt;th&gt;CourseID&lt;/th&gt;
              &lt;th&gt;Grade&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;CS101&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;CS102&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;MATH201&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;PHYS101&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;HIST101&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The result after applying the inner join transformation looks like the following:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;StudentID&lt;/th&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Major&lt;/th&gt;
              &lt;th&gt;CourseID&lt;/th&gt;
              &lt;th&gt;Grade&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;John&lt;/td&gt;
              &lt;td&gt;Computer Science&lt;/td&gt;
              &lt;td&gt;CS101&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;John&lt;/td&gt;
              &lt;td&gt;Computer Science&lt;/td&gt;
              &lt;td&gt;CS102&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;Emily&lt;/td&gt;
              &lt;td&gt;Mathematics&lt;/td&gt;
              &lt;td&gt;MATH201&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;Michael&lt;/td&gt;
              &lt;td&gt;Physics&lt;/td&gt;
              &lt;td&gt;PHYS101&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The inner join only includes rows where there is a match between the &amp;ldquo;StudentID&amp;rdquo; in both tables. In this case, the result does not include &amp;ldquo;Jennifer&amp;rdquo; from the &amp;ldquo;Students&amp;rdquo; table because there are no matching enrollments for her in the &amp;ldquo;Enrollments&amp;rdquo; table.&lt;/p&gt;
&lt;h4 id=&#34;outer-join-for-time-series-data&#34;&gt;Outer join (for Time Series data)&lt;/h4&gt;
&lt;p&gt;An outer join includes all data from an inner join and rows where values do not match in every input. While the inner join joins Query A and Query B on the time field, the outer join includes all rows that don&amp;rsquo;t match on the time field.&lt;/p&gt;
&lt;p&gt;In the following example, two queries return table data. It is visualized as two tables before applying the outer join transformation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query A:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Job&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;node&lt;/td&gt;
              &lt;td&gt;25260122&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;123001233&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:14:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;345001233&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Query B:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Server&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:04:20&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The result after applying the outer join transformation looks like the following:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Job&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
              &lt;th&gt;Server&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:04:20&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;server 3&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:14:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;345001233&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;node&lt;/td&gt;
              &lt;td&gt;25260122&lt;/td&gt;
              &lt;td&gt;server 1&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;123001233&lt;/td&gt;
              &lt;td&gt;server 2&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;In the following example, a template query displays time series data from multiple servers in a table visualization. The results of only one query can be viewed at a time.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/join-fields-before-7-0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/join-fields-before-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/join-fields-before-7-0.png?w=320 320w, /static/img/docs/transformations/join-fields-before-7-0.png?w=550 550w, /static/img/docs/transformations/join-fields-before-7-0.png?w=750 750w, /static/img/docs/transformations/join-fields-before-7-0.png?w=900 900w, /static/img/docs/transformations/join-fields-before-7-0.png?w=1040 1040w, /static/img/docs/transformations/join-fields-before-7-0.png?w=1240 1240w, /static/img/docs/transformations/join-fields-before-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A table visualization showing results for one server&#34;width=&#34;1283&#34;height=&#34;583&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/join-fields-before-7-0.png&#34;
            alt=&#34;A table visualization showing results for one server&#34;width=&#34;1283&#34;height=&#34;583&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;I applied a transformation to join the query results using the time field. Now I can run calculations, combine, and organize the results in this new table.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/join-fields-after-7-0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/join-fields-after-7-0.png&#34;data-srcset=&#34;/static/img/docs/transformations/join-fields-after-7-0.png?w=320 320w, /static/img/docs/transformations/join-fields-after-7-0.png?w=550 550w, /static/img/docs/transformations/join-fields-after-7-0.png?w=750 750w, /static/img/docs/transformations/join-fields-after-7-0.png?w=900 900w, /static/img/docs/transformations/join-fields-after-7-0.png?w=1040 1040w, /static/img/docs/transformations/join-fields-after-7-0.png?w=1240 1240w, /static/img/docs/transformations/join-fields-after-7-0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A table visualization showing results for multiple servers&#34;width=&#34;1236&#34;height=&#34;641&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/join-fields-after-7-0.png&#34;
            alt=&#34;A table visualization showing results for multiple servers&#34;width=&#34;1236&#34;height=&#34;641&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h4 id=&#34;outer-join-for-sql-like-data&#34;&gt;Outer join (for SQL-like data)&lt;/h4&gt;
&lt;p&gt;A tabular outer join combining tables so that the result includes matched and unmatched rows from either or both tables.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;StudentID&lt;/th&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Major&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;John&lt;/td&gt;
              &lt;td&gt;Computer Science&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;Emily&lt;/td&gt;
              &lt;td&gt;Mathematics&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;Michael&lt;/td&gt;
              &lt;td&gt;Physics&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;4&lt;/td&gt;
              &lt;td&gt;Jennifer&lt;/td&gt;
              &lt;td&gt;Chemistry&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Can now be joined with:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;StudentID&lt;/th&gt;
              &lt;th&gt;CourseID&lt;/th&gt;
              &lt;th&gt;Grade&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;CS101&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;CS102&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;MATH201&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;PHYS101&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;HIST101&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The result after applying the outer join transformation looks like the following:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;StudentID&lt;/th&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Major&lt;/th&gt;
              &lt;th&gt;CourseID&lt;/th&gt;
              &lt;th&gt;Grade&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;John&lt;/td&gt;
              &lt;td&gt;Computer Science&lt;/td&gt;
              &lt;td&gt;CS101&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;John&lt;/td&gt;
              &lt;td&gt;Computer Science&lt;/td&gt;
              &lt;td&gt;CS102&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;Emily&lt;/td&gt;
              &lt;td&gt;Mathematics&lt;/td&gt;
              &lt;td&gt;MATH201&lt;/td&gt;
              &lt;td&gt;A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;Michael&lt;/td&gt;
              &lt;td&gt;Physics&lt;/td&gt;
              &lt;td&gt;PHYS101&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;4&lt;/td&gt;
              &lt;td&gt;Jennifer&lt;/td&gt;
              &lt;td&gt;Chemistry&lt;/td&gt;
              &lt;td&gt;NULL&lt;/td&gt;
              &lt;td&gt;NULL&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;NULL&lt;/td&gt;
              &lt;td&gt;NULL&lt;/td&gt;
              &lt;td&gt;HIST101&lt;/td&gt;
              &lt;td&gt;B&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Combine and analyze data from various queries with table joining for a comprehensive view of your information.&lt;/p&gt;
&lt;h3 id=&#34;join-by-labels&#34;&gt;Join by labels&lt;/h3&gt;
&lt;p&gt;Use this transformation to join multiple results into a single table.&lt;/p&gt;
&lt;p&gt;This is especially useful for converting multiple time series results into a single wide table with a shared &lt;strong&gt;Label&lt;/strong&gt; field.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Join&lt;/strong&gt; - Select the label to join by between the labels available or common across all time series.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value&lt;/strong&gt; - The name for the output result.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;example-1&#34;&gt;Example&lt;/h4&gt;
&lt;h5 id=&#34;input&#34;&gt;Input&lt;/h5&gt;
&lt;p&gt;series1{what=&amp;ldquo;Temp&amp;rdquo;, cluster=&amp;ldquo;A&amp;rdquo;, job=&amp;ldquo;J1&amp;rdquo;}&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;200&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;series2{what=&amp;ldquo;Temp&amp;rdquo;, cluster=&amp;ldquo;B&amp;rdquo;, job=&amp;ldquo;J1&amp;rdquo;}&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;200&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;series3{what=&amp;ldquo;Speed&amp;rdquo;, cluster=&amp;ldquo;B&amp;rdquo;, job=&amp;ldquo;J1&amp;rdquo;}&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;22&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;28&lt;/td&gt;
              &lt;td&gt;77&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h5 id=&#34;config&#34;&gt;Config&lt;/h5&gt;
&lt;p&gt;value: &amp;ldquo;what&amp;rdquo;&lt;/p&gt;
&lt;h5 id=&#34;output&#34;&gt;Output&lt;/h5&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;cluster&lt;/th&gt;
              &lt;th&gt;job&lt;/th&gt;
              &lt;th&gt;Temp&lt;/th&gt;
              &lt;th&gt;Speed&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;A&lt;/td&gt;
              &lt;td&gt;J1&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;A&lt;/td&gt;
              &lt;td&gt;J1&lt;/td&gt;
              &lt;td&gt;200&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;B&lt;/td&gt;
              &lt;td&gt;J1&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;B&lt;/td&gt;
              &lt;td&gt;J1&lt;/td&gt;
              &lt;td&gt;200&lt;/td&gt;
              &lt;td&gt;77&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Combine and organize time series data effectively with this transformation for comprehensive insights.&lt;/p&gt;
&lt;h3 id=&#34;labels-to-fields&#34;&gt;Labels to fields&lt;/h3&gt;
&lt;p&gt;Use this transformation to convert time series results with labels or tags into a table, including each label&amp;rsquo;s keys and values in the result. Display labels as either columns or row values for enhanced data visualization.&lt;/p&gt;
&lt;p&gt;Given a query result of two time series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Series 1: labels Server=Server A, Datacenter=EU&lt;/li&gt;
&lt;li&gt;Series 2: labels Server=Server B, Datacenter=EU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In &amp;ldquo;Columns&amp;rdquo; mode, the result looks like this:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Server&lt;/th&gt;
              &lt;th&gt;Datacenter&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Server A&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Server B&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;2&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;In &amp;ldquo;Rows&amp;rdquo; mode, the result has a table for each series and show each label value like this:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;label&lt;/th&gt;
              &lt;th&gt;value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Server&lt;/td&gt;
              &lt;td&gt;Server A&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Datacenter&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;label&lt;/th&gt;
              &lt;th&gt;value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Server&lt;/td&gt;
              &lt;td&gt;Server B&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Datacenter&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;value-field-name&#34;&gt;Value field name&lt;/h4&gt;
&lt;p&gt;If you selected Server as the &lt;strong&gt;Value field name&lt;/strong&gt;, then you would get one field for every value of the Server label.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Datacenter&lt;/th&gt;
              &lt;th&gt;Server A&lt;/th&gt;
              &lt;th&gt;Server B&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;2&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;merging-behavior&#34;&gt;Merging behavior&lt;/h4&gt;
&lt;p&gt;The labels to fields transformer is internally two separate transformations. The first acts on single series and extracts labels to fields. The second is the &lt;a href=&#34;#merge&#34;&gt;merge&lt;/a&gt; transformation that joins all the results into a single table. The merge transformation tries to join on all matching fields. This merge step is required and cannot be turned off.&lt;/p&gt;
&lt;p&gt;To illustrate this, here is an example where you have two queries that return time series with no overlapping labels.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Series 1: labels Server=ServerA&lt;/li&gt;
&lt;li&gt;Series 2: labels Datacenter=EU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This will first result in these two tables:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Server&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;ServerA&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Datacenter&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;After merge:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Server&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
              &lt;th&gt;Datacenter&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;ServerA&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Convert your time series data into a structured table format for a clearer and more organized representation.&lt;/p&gt;
&lt;h3 id=&#34;limit&#34;&gt;Limit&lt;/h3&gt;
&lt;p&gt;Use this transformation to restrict the number of rows displayed, providing a more focused view of your data. This is particularly useful when dealing with large datasets.&lt;/p&gt;
&lt;p&gt;Below is an example illustrating the impact of the &lt;strong&gt;Limit&lt;/strong&gt; transformation on a response from a data source:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Metric&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;29&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;33&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;19&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Here is the result after adding a Limit transformation with a value of &amp;lsquo;3&amp;rsquo;:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Metric&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;29&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Using a negative number, you can keep values from the end of the set. Here is the result after adding a Limit transformation with a value of &amp;lsquo;-3&amp;rsquo;:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Metric&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;33&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;19&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation helps you tailor the visual presentation of your data to focus on the most relevant information.&lt;/p&gt;
&lt;h3 id=&#34;merge-seriestables&#34;&gt;Merge series/tables&lt;/h3&gt;
&lt;p&gt;Use this transformation to combine the results from multiple queries into a single result, which is particularly useful when using the table panel visualization. This transformation merges values into the same row if the shared fields contain the same data.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example illustrating the impact of the &lt;strong&gt;Merge series/tables&lt;/strong&gt; transformation on two queries returning table data:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query A:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Job&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;node&lt;/td&gt;
              &lt;td&gt;25260122&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;123001233&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Query B:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Job&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;node&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Here is the result after applying the Merge transformation.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Job&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;node&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
              &lt;td&gt;25260122&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;postgre&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;123001233&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation combines values from Query A and Query B into a unified table, enhancing the presentation of data for better insights.&lt;/p&gt;
&lt;h3 id=&#34;organize-fields-by-name&#34;&gt;Organize fields by name&lt;/h3&gt;
&lt;p&gt;Use this transformation to provide the flexibility to rename, reorder, or hide fields returned by a single query in your panel. This transformation is applicable only to panels with a single query. If your panel has multiple queries, consider using an &amp;ldquo;Outer join&amp;rdquo; transformation or removing extra queries.&lt;/p&gt;
&lt;h4 id=&#34;transforming-fields&#34;&gt;Transforming fields&lt;/h4&gt;
&lt;p&gt;Grafana displays a list of fields returned by the query, allowing you to perform the following actions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Set field order mode&lt;/strong&gt; - If the mode is &lt;strong&gt;Manual&lt;/strong&gt;, you can change the field order by hovering the cursor over a field and dragging the field to its new position. If it&amp;rsquo;s &lt;strong&gt;Auto&lt;/strong&gt;, use the &lt;strong&gt;OFF&lt;/strong&gt;, &lt;strong&gt;ASC&lt;/strong&gt;, and &lt;strong&gt;DESC&lt;/strong&gt; options to order by any labels on the field or by the field name. For any field that is sorted &lt;strong&gt;ASC&lt;/strong&gt; or &lt;strong&gt;DESC&lt;/strong&gt;, you can drag the option to set the priority of the sorting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change field order&lt;/strong&gt; - Hover over a field, and when your cursor turns into a hand, drag the field to its new position.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hide or show a field&lt;/strong&gt; - Use the eye icon next to the field name to toggle the visibility of a specific field.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rename fields&lt;/strong&gt; - Type a new name in the &amp;ldquo;Rename &lt;field&gt;&amp;rdquo; box to customize field names.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;example-2&#34;&gt;Example:&lt;/h4&gt;
&lt;h5 id=&#34;original-query-result&#34;&gt;Original Query Result&lt;/h5&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Metric&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;29&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h5 id=&#34;after-applying-field-overrides&#34;&gt;After Applying Field Overrides&lt;/h5&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Sensor&lt;/th&gt;
              &lt;th&gt;Reading&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;29&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation lets you to tailor the display of query results, ensuring a clear and insightful representation of your data in Grafana.&lt;/p&gt;
&lt;h3 id=&#34;partition-by-values&#34;&gt;Partition by values&lt;/h3&gt;
&lt;p&gt;Use this transformation to streamline the process of graphing multiple series without the need for multiple queries with different &amp;lsquo;WHERE&amp;rsquo; clauses.&lt;/p&gt;
&lt;p&gt;This is particularly useful when dealing with a metrics SQL table, as illustrated below:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Region&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2022-10-20 12:00:00&lt;/td&gt;
              &lt;td&gt;US&lt;/td&gt;
              &lt;td&gt;1520&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2022-10-20 12:00:00&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;2936&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2022-10-20 01:00:00&lt;/td&gt;
              &lt;td&gt;US&lt;/td&gt;
              &lt;td&gt;1327&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2022-10-20 01:00:00&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;912&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;With the &lt;strong&gt;Partition by values&lt;/strong&gt; transformation, you can issue a single query and split the results by unique values in one or more columns (fields) of your choosing. The following example uses &amp;lsquo;Region&amp;rsquo;:&lt;/p&gt;
&lt;p&gt;&amp;lsquo;SELECT Time, Region, Value FROM metrics WHERE Time &amp;gt; &amp;ldquo;2022-10-20&amp;rdquo;&amp;rsquo;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Region&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2022-10-20 12:00:00&lt;/td&gt;
              &lt;td&gt;US&lt;/td&gt;
              &lt;td&gt;1520&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2022-10-20 01:00:00&lt;/td&gt;
              &lt;td&gt;US&lt;/td&gt;
              &lt;td&gt;1327&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Region&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2022-10-20 12:00:00&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;2936&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2022-10-20 01:00:00&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;912&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation simplifies the process and enhances the flexibility of visualizing multiple series within the same time series visualization.&lt;/p&gt;
&lt;h3 id=&#34;prepare-time-series&#34;&gt;Prepare time series&lt;/h3&gt;
&lt;p&gt;Use this transformation to address issues when a data source returns time series data in a format that isn&amp;rsquo;t compatible with the desired visualization. This transformation allows you to convert time series data between wide and long formats, providing flexibility in data frame structures.&lt;/p&gt;
&lt;h4 id=&#34;available-options&#34;&gt;Available options&lt;/h4&gt;
&lt;h5 id=&#34;wide-time-series&#34;&gt;Wide time series&lt;/h5&gt;
&lt;p&gt;Select this option to transform the time series data frame from the long format to the wide format. If your data source returns time series data in a long format and your visualization requires a wide format, this transformation simplifies the process.&lt;/p&gt;
&lt;p&gt;A wide time series combines data into a single frame with one shared, ascending time field. Time fields do not repeat and multiple values extend in separate columns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example: Converting from long to wide format&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
              &lt;th&gt;Variable&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 00:00:00&lt;/td&gt;
              &lt;td&gt;Value1&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 00:00:00&lt;/td&gt;
              &lt;td&gt;Value2&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 01:00:00&lt;/td&gt;
              &lt;td&gt;Value1&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 01:00:00&lt;/td&gt;
              &lt;td&gt;Value2&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Transformed to:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
              &lt;th&gt;Value1&lt;/th&gt;
              &lt;th&gt;Value2&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 00:00:00&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 01:00:00&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h5 id=&#34;multi-frame-time-series&#34;&gt;Multi-frame time series&lt;/h5&gt;
&lt;p&gt;Multi-frame time series break data into multiple frames that all contain two fields: a time field and a numeric value field. Time is always ascending. String values are represented as field labels.&lt;/p&gt;
&lt;h5 id=&#34;long-time-series&#34;&gt;Long time series&lt;/h5&gt;
&lt;p&gt;A long time series combines data into one frame, with the first field being an ascending time field. The time field might have duplicates. String values are in separate fields, and there might be more than one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example: Converting to long format&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Value1&lt;/th&gt;
              &lt;th&gt;Value2&lt;/th&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
              &lt;td&gt;2023-01-03 00:00:00&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;30&lt;/td&gt;
              &lt;td&gt;40&lt;/td&gt;
              &lt;td&gt;2023-01-02 00:00:00&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;50&lt;/td&gt;
              &lt;td&gt;60&lt;/td&gt;
              &lt;td&gt;2023-01-01 00:00:00&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;70&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
              &lt;td&gt;2023-01-01 00:00:00&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Transformed to:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Timestamp&lt;/th&gt;
              &lt;th&gt;Value1&lt;/th&gt;
              &lt;th&gt;Value2&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 00:00:00&lt;/td&gt;
              &lt;td&gt;70&lt;/td&gt;
              &lt;td&gt;80&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-01 01:00:00&lt;/td&gt;
              &lt;td&gt;50&lt;/td&gt;
              &lt;td&gt;60&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-02 01:00:00&lt;/td&gt;
              &lt;td&gt;30&lt;/td&gt;
              &lt;td&gt;40&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2023-01-03 01:00:00&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;reduce&#34;&gt;Reduce&lt;/h3&gt;
&lt;p&gt;Use this transformation to apply a calculation to each field in the data frame and return a single value. This transformation is particularly useful for consolidating multiple time series data into a more compact, summarized format. Time fields are removed when applying this transformation.&lt;/p&gt;
&lt;p&gt;Consider the input:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query A:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Temp&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;12.3&lt;/td&gt;
              &lt;td&gt;256122&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;15.4&lt;/td&gt;
              &lt;td&gt;1230233&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Query B:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;AQI&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;6.5&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:24:20&lt;/td&gt;
              &lt;td&gt;3.2&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The reduce transformer has two modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Series to rows&lt;/strong&gt; - Creates a row for each field and a column for each calculation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduce fields&lt;/strong&gt; - Keeps the existing frame structure, but collapses each field into a single value.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, if you used the &lt;strong&gt;First&lt;/strong&gt; and &lt;strong&gt;Last&lt;/strong&gt; calculation with a &lt;strong&gt;Series to rows&lt;/strong&gt; transformation, then
the result would be:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Field&lt;/th&gt;
              &lt;th&gt;First&lt;/th&gt;
              &lt;th&gt;Last&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Temp&lt;/td&gt;
              &lt;td&gt;12.3&lt;/td&gt;
              &lt;td&gt;15.4&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Uptime&lt;/td&gt;
              &lt;td&gt;256122&lt;/td&gt;
              &lt;td&gt;1230233&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;AQI&lt;/td&gt;
              &lt;td&gt;6.5&lt;/td&gt;
              &lt;td&gt;3.2&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Errors&lt;/td&gt;
              &lt;td&gt;15&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The &lt;strong&gt;Reduce fields&lt;/strong&gt; with the &lt;strong&gt;Last&lt;/strong&gt; calculation,
results in two frames, each with one row:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query A:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Temp&lt;/th&gt;
              &lt;th&gt;Uptime&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;15.4&lt;/td&gt;
              &lt;td&gt;1230233&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Query B:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;AQI&lt;/th&gt;
              &lt;th&gt;Errors&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;3.2&lt;/td&gt;
              &lt;td&gt;5&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This flexible transformation simplifies the process of consolidating and summarizing data from multiple time series into a more manageable and organized format.&lt;/p&gt;
&lt;h3 id=&#34;rename-by-regex&#34;&gt;Rename by regex&lt;/h3&gt;
&lt;p&gt;Use this transformation to rename parts of the query results using a regular expression and replacement pattern.&lt;/p&gt;
&lt;p&gt;You can specify a regular expression, which is only applied to matches, along with a replacement pattern that support back references. For example, let&amp;rsquo;s imagine you&amp;rsquo;re visualizing CPU usage per host and you want to remove the domain name. You could set the regex to &amp;lsquo;/^([^.]&#43;).*/&amp;rsquo; and the replacement pattern to &amp;lsquo;$1&amp;rsquo;, &amp;lsquo;web-01.example.com&amp;rsquo; would become &amp;lsquo;web-01&amp;rsquo;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The Rename by regex transformation was improved in Grafana v9.0.0 to allow global patterns of the form &amp;lsquo;/&lt;stringToReplace&gt;/g&amp;rsquo;. Depending on the regex match used, this may cause some transformations to behave slightly differently. You can guarantee the same behavior as before by wrapping the match string in forward slashes &amp;lsquo;(/)&amp;rsquo;, e.g. &amp;lsquo;(.&lt;em&gt;)&amp;rsquo; would become &amp;lsquo;/(.&lt;/em&gt;)/&amp;rsquo;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;In the following example, we are stripping the &amp;lsquo;A-&amp;rsquo; prefix from field names. In the before image, you can see everything is prefixed with &amp;lsquo;A-&amp;rsquo;:&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png&#34;data-srcset=&#34;/media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png?w=320 320w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png?w=550 550w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png?w=750 750w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png?w=900 900w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png?w=1040 1040w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png?w=1240 1240w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A time series with full series names&#34;width=&#34;2782&#34;height=&#34;1406&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-before-v11.0.png&#34;
            alt=&#34;A time series with full series names&#34;width=&#34;2782&#34;height=&#34;1406&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;With the transformation applied, you can see we are left with just the remainder of the string.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png&#34;data-srcset=&#34;/media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png?w=320 320w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png?w=550 550w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png?w=750 750w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png?w=900 900w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png?w=1040 1040w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png?w=1240 1240w, /media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A time series with shortened series names&#34;width=&#34;2782&#34;height=&#34;1412&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/media/docs/grafana/panels-visualizations/screenshot-rename-by-regex-after-v11.0.png&#34;
            alt=&#34;A time series with shortened series names&#34;width=&#34;2782&#34;height=&#34;1412&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;This transformation lets you to tailor your data to meet your visualization needs, making your dashboards more informative and user-friendly.&lt;/p&gt;
&lt;h3 id=&#34;rows-to-fields&#34;&gt;Rows to fields&lt;/h3&gt;
&lt;p&gt;Use this transformation to convert rows into separate fields. This can be useful because fields can be styled and configured individually. It can also use additional fields as sources for dynamic field configuration or map them to field labels. The additional labels can then be used to define better display names for the resulting fields.&lt;/p&gt;
&lt;p&gt;This transformation includes a field table which lists all fields in the data returned by the configuration query. This table gives you control over what field should be mapped to each configuration property (the &lt;strong&gt;Use as&lt;/strong&gt; option). You can also choose which value to select if there are multiple rows in the returned data.&lt;/p&gt;
&lt;p&gt;This transformation requires:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;One field to use as the source of field names.&lt;/p&gt;
&lt;p&gt;By default, the transform uses the first string field as the source. You can override this default setting by selecting &lt;strong&gt;Field name&lt;/strong&gt; in the &lt;strong&gt;Use as&lt;/strong&gt; column for the field you want to use instead.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;One field to use as the source of values.&lt;/p&gt;
&lt;p&gt;By default, the transform uses the first number field as the source. But you can override this default setting by selecting &lt;strong&gt;Field value&lt;/strong&gt; in the &lt;strong&gt;Use as&lt;/strong&gt; column for the field you want to use instead.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Useful when visualizing data in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gauge&lt;/li&gt;
&lt;li&gt;Stat&lt;/li&gt;
&lt;li&gt;Pie chart&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;map-extra-fields-to-labels&#34;&gt;Map extra fields to labels&lt;/h4&gt;
&lt;p&gt;If a field does not map to config property Grafana will automatically use it as source for a label on the output field-&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;DataCenter&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;ServerA&lt;/td&gt;
              &lt;td&gt;US&lt;/td&gt;
              &lt;td&gt;100&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ServerB&lt;/td&gt;
              &lt;td&gt;EU&lt;/td&gt;
              &lt;td&gt;200&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;ServerA (labels: DataCenter: US)&lt;/th&gt;
              &lt;th&gt;ServerB (labels: DataCenter: EU)&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The extra labels can now be used in the field display name provide more complete field names.&lt;/p&gt;
&lt;p&gt;If you want to extract config from one query and apply it to another you should use the config from query results transformation.&lt;/p&gt;
&lt;h4 id=&#34;example-3&#34;&gt;Example&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Input:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Name&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
              &lt;th&gt;Max&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;ServerA&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;100&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ServerB&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
              &lt;td&gt;200&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ServerC&lt;/td&gt;
              &lt;td&gt;30&lt;/td&gt;
              &lt;td&gt;300&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;ServerA (config: max=100)&lt;/th&gt;
              &lt;th&gt;ServerB (config: max=200)&lt;/th&gt;
              &lt;th&gt;ServerC (config: max=300)&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
              &lt;td&gt;30&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;As you can see each row in the source data becomes a separate field. Each field now also has a max config option set. Options like &lt;strong&gt;Min&lt;/strong&gt;, &lt;strong&gt;Max&lt;/strong&gt;, &lt;strong&gt;Unit&lt;/strong&gt; and &lt;strong&gt;Thresholds&lt;/strong&gt; are all part of field configuration and if set like this will be used by the visualization instead of any options manually configured in the panel editor options pane.&lt;/p&gt;
&lt;p&gt;This transformation enables the conversion of rows into individual fields, facilitates dynamic field configuration, and maps additional fields to labels.&lt;/p&gt;
&lt;h3 id=&#34;series-to-rows&#34;&gt;Series to rows&lt;/h3&gt;
&lt;p&gt;Use this transformation to combine the result from multiple time series data queries into one single result. This is helpful when using the table panel visualization.&lt;/p&gt;
&lt;p&gt;The result from this transformation will contain three columns: Time, Metric, and Value. The Metric column is added so you easily can see from which query the metric originates from. Customize this value by defining Label on the source query.&lt;/p&gt;
&lt;p&gt;In the example below, we have two queries returning time series data. It is visualized as two separate tables before applying the transformation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query A:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Temperature&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;
              &lt;td&gt;19&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Query B:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Humidity&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;24&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;29&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;33&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Here is the result after applying the Series to rows transformation.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Metric&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;25&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 11:34:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:32:20&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;29&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:31:22&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;22&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:57&lt;/td&gt;
              &lt;td&gt;Humidity&lt;/td&gt;
              &lt;td&gt;33&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 09:30:05&lt;/td&gt;
              &lt;td&gt;Temperature&lt;/td&gt;
              &lt;td&gt;19&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;This transformation facilitates the consolidation of results from multiple time series queries, providing a streamlined and unified dataset for efficient analysis and visualization in a tabular format.&lt;/p&gt;
&lt;h3 id=&#34;sort-by&#34;&gt;Sort by&lt;/h3&gt;
&lt;p&gt;Use this transformation to sort each frame within a query result based on a specified field, making your data easier to understand and analyze. By configuring the desired field for sorting, you can control the order in which the data is presented in the table or visualization.&lt;/p&gt;
&lt;p&gt;Use the &lt;strong&gt;Reverse&lt;/strong&gt; switch to inversely order the values within the specified field. This functionality is particularly useful when you want to quickly toggle between ascending and descending order to suit your analytical needs.&lt;/p&gt;
&lt;p&gt;For example, in a scenario where time-series data is retrieved from a data source, the &lt;strong&gt;Sort by&lt;/strong&gt; transformation can be applied to arrange the data frames based on the timestamp, either in ascending or descending order, depending on the analytical requirements. This capability ensures that you can easily navigate and interpret time-series data, gaining valuable insights from the organized and visually coherent presentation.&lt;/p&gt;
&lt;h3 id=&#34;spatial&#34;&gt;Spatial&lt;/h3&gt;
&lt;p&gt;Use this transformation to apply spatial operations to query results.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt; - Select an action:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prepare spatial field&lt;/strong&gt; - Set a geometry field based on the results of other fields.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Location mode&lt;/strong&gt; - Select a location mode (these options are shared by the &lt;strong&gt;Calculate value&lt;/strong&gt; and &lt;strong&gt;Transform&lt;/strong&gt; modes):
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto&lt;/strong&gt; - Automatically identify location data based on default field names.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coords&lt;/strong&gt; - Specify latitude and longitude fields.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Geohash&lt;/strong&gt; - Specify a geohash field.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lookup&lt;/strong&gt; - Specify Gazetteer location fields.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculate value&lt;/strong&gt; - Use the geometry to define a new field (heading/distance/area).
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Function&lt;/strong&gt; - Choose a mathematical operation to apply to the geometry:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Heading&lt;/strong&gt; - Calculate the heading (direction) between two points.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Area&lt;/strong&gt; - Calculate the area enclosed by a polygon defined by the geometry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distance&lt;/strong&gt; - Calculate the distance between two points.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transform&lt;/strong&gt; - Apply spatial operations to the geometry.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operation&lt;/strong&gt; - Choose an operation to apply to the geometry:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;As line&lt;/strong&gt; - Create a single line feature with a vertex at each row.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Line builder&lt;/strong&gt; - Create a line between two points.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This transformation allows you to manipulate and analyze geospatial data, enabling operations such as creating lines between points, calculating spatial properties, and more.&lt;/p&gt;
&lt;h3 id=&#34;time-series-to-table-transform&#34;&gt;Time series to table transform&lt;/h3&gt;
&lt;p&gt;Use this transformation to convert time series results into a table, transforming a time series data frame into a &lt;strong&gt;Trend&lt;/strong&gt; field which can then be used with the 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/visualizations/table/#sparkline&#34;&gt;sparkline cell type&lt;/a&gt;. If there are multiple time series queries, each will result in a separate table data frame. These can be joined using join or merge transforms to produce a single table with multiple sparklines per row.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/table-sparklines.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/table-sparklines.png&#34;data-srcset=&#34;/static/img/docs/transformations/table-sparklines.png?w=320 320w, /static/img/docs/transformations/table-sparklines.png?w=550 550w, /static/img/docs/transformations/table-sparklines.png?w=750 750w, /static/img/docs/transformations/table-sparklines.png?w=900 900w, /static/img/docs/transformations/table-sparklines.png?w=1040 1040w, /static/img/docs/transformations/table-sparklines.png?w=1240 1240w, /static/img/docs/transformations/table-sparklines.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A table panel showing multiple values and their corresponding sparklines.&#34;width=&#34;1472&#34;height=&#34;610&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/table-sparklines.png&#34;
            alt=&#34;A table panel showing multiple values and their corresponding sparklines.&#34;width=&#34;1472&#34;height=&#34;610&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;For each generated &lt;strong&gt;Trend&lt;/strong&gt; field value, a calculation function can be selected. This value is displayed next to the sparkline and will be used for sorting table rows.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/transformations/timeseries-table-select-stat.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/transformations/timeseries-table-select-stat.png&#34;data-srcset=&#34;/static/img/docs/transformations/timeseries-table-select-stat.png?w=320 320w, /static/img/docs/transformations/timeseries-table-select-stat.png?w=550 550w, /static/img/docs/transformations/timeseries-table-select-stat.png?w=750 750w, /static/img/docs/transformations/timeseries-table-select-stat.png?w=900 900w, /static/img/docs/transformations/timeseries-table-select-stat.png?w=1040 1040w, /static/img/docs/transformations/timeseries-table-select-stat.png?w=1240 1240w, /static/img/docs/transformations/timeseries-table-select-stat.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A select box showing available statistics that can be calculated.&#34;width=&#34;456&#34;height=&#34;484&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/transformations/timeseries-table-select-stat.png&#34;
            alt=&#34;A select box showing available statistics that can be calculated.&#34;width=&#34;456&#34;height=&#34;484&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This transformation is available in Grafana 9.5&#43; as an opt-in beta feature. Modify the Grafana 
    &lt;a href=&#34;/docs/grafana/v12.4/setup-grafana/configure-grafana/#configuration-file-location&#34;&gt;configuration file&lt;/a&gt; to use it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;transpose&#34;&gt;Transpose&lt;/h3&gt;
&lt;p&gt;Use this transformation to pivot the data frame, converting rows into columns and columns into rows. This transformation is particularly useful when you want to switch the orientation of your data to better suit your visualization needs.
If you have multiple types, it will default to string type. You can select how empty cells should be represented.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before Transformation:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;env&lt;/th&gt;
              &lt;th&gt;January&lt;/th&gt;
              &lt;th&gt;February&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;prod&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;2&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;dev&lt;/td&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;4&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;After applying transpose transformation:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Field&lt;/th&gt;
              &lt;th&gt;prod&lt;/th&gt;
              &lt;th&gt;dev&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;January&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;3&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;February&lt;/td&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;4&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
    style=&#34;max-width: 1100px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png&#34;data-srcset=&#34;/media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png?w=320 320w, /media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png?w=550 550w, /media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png?w=750 750w, /media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png?w=900 900w, /media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png?w=1040 1040w, /media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png?w=1240 1240w, /media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;Before and after transpose transformation&#34;width=&#34;1040&#34;height=&#34;792&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/media/docs/grafana/transformations/screenshot-grafana-11-2-transpose-transformation.png&#34;
            alt=&#34;Before and after transpose transformation&#34;width=&#34;1040&#34;height=&#34;792&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;h3 id=&#34;trendline&#34;&gt;Trendline&lt;/h3&gt;
&lt;p&gt;Use this transformation to create a new data frame containing values predicted by a statistical model. This is useful for finding a trend in chaotic data. It works by fitting a mathematical function to the data, using either linear or polynomial regression. The data frame can then be used in a visualization to display a trendline.&lt;/p&gt;
&lt;p&gt;There are two different models:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear&lt;/strong&gt; - Fits a linear function to the data.
&lt;figure
      class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
      style=&#34;max-width: 1100px;&#34;
      itemprop=&#34;associatedMedia&#34;
      itemscope=&#34;&#34;
      itemtype=&#34;http://schema.org/ImageObject&#34;
    &gt;&lt;a
          class=&#34;lightbox-link&#34;
          href=&#34;/static/img/docs/transformations/linear-regression.png&#34;
          itemprop=&#34;contentUrl&#34;
        &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
            class=&#34;lazyload &#34;
            data-src=&#34;/static/img/docs/transformations/linear-regression.png&#34;data-srcset=&#34;/static/img/docs/transformations/linear-regression.png?w=320 320w, /static/img/docs/transformations/linear-regression.png?w=550 550w, /static/img/docs/transformations/linear-regression.png?w=750 750w, /static/img/docs/transformations/linear-regression.png?w=900 900w, /static/img/docs/transformations/linear-regression.png?w=1040 1040w, /static/img/docs/transformations/linear-regression.png?w=1240 1240w, /static/img/docs/transformations/linear-regression.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A time series visualization with a straight line representing the linear function&#34;width=&#34;406&#34;height=&#34;154&#34;/&gt;
          &lt;noscript&gt;
            &lt;img
              src=&#34;/static/img/docs/transformations/linear-regression.png&#34;
              alt=&#34;A time series visualization with a straight line representing the linear function&#34;width=&#34;406&#34;height=&#34;154&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
          &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Polynomial&lt;/strong&gt; - Fits a polynomial function to the data.
&lt;figure
      class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow&#34;
      style=&#34;max-width: 1100px;&#34;
      itemprop=&#34;associatedMedia&#34;
      itemscope=&#34;&#34;
      itemtype=&#34;http://schema.org/ImageObject&#34;
    &gt;&lt;a
          class=&#34;lightbox-link&#34;
          href=&#34;/static/img/docs/transformations/polynomial-regression.png&#34;
          itemprop=&#34;contentUrl&#34;
        &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
            class=&#34;lazyload &#34;
            data-src=&#34;/static/img/docs/transformations/polynomial-regression.png&#34;data-srcset=&#34;/static/img/docs/transformations/polynomial-regression.png?w=320 320w, /static/img/docs/transformations/polynomial-regression.png?w=550 550w, /static/img/docs/transformations/polynomial-regression.png?w=750 750w, /static/img/docs/transformations/polynomial-regression.png?w=900 900w, /static/img/docs/transformations/polynomial-regression.png?w=1040 1040w, /static/img/docs/transformations/polynomial-regression.png?w=1240 1240w, /static/img/docs/transformations/polynomial-regression.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;A time series visualization with a curved line representing the polynomial function&#34;width=&#34;405&#34;height=&#34;154&#34;/&gt;
          &lt;noscript&gt;
            &lt;img
              src=&#34;/static/img/docs/transformations/polynomial-regression.png&#34;
              alt=&#34;A time series visualization with a curved line representing the polynomial function&#34;width=&#34;405&#34;height=&#34;154&#34;class=&#34;docs-image--no-shadow&#34;/&gt;
          &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This transformation was previously called regression analysis.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;smoothing&#34;&gt;Smoothing&lt;/h3&gt;
&lt;p&gt;Use this transformation to reduce noise in time series data through adaptive smoothing. This transformation creates smoother, cleaner visualizations while preserving all original time points and important trends and patterns in your data.&lt;/p&gt;
&lt;p&gt;The smoothing transformation uses the ASAP (Automatic Smoothing for Attention Prioritization) algorithm internally to generate a smoothed curve, which is then interpolated back onto all original time points. This ensures your visualization maintains continuous lines without gaps while reducing noise.&lt;/p&gt;
&lt;h4 id=&#34;available-options-1&#34;&gt;Available options&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resolution&lt;/strong&gt; - Controls smoothing intensity (1-1000). Lower values create more aggressive smoothing, while higher values preserve more detail. The output preserves all original time points.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;when-to-use-smoothing&#34;&gt;When to use smoothing&lt;/h4&gt;
&lt;p&gt;This transformation is useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Noisy time series data that obscures underlying trends&lt;/li&gt;
&lt;li&gt;Clearer trend analysis and pattern recognition&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;example-4&#34;&gt;Example&lt;/h4&gt;
&lt;p&gt;Consider noisy sensor data with thousands of points:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before smoothing:&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Temperature&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:00:00&lt;/td&gt;
              &lt;td&gt;23.1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:00:01&lt;/td&gt;
              &lt;td&gt;23.3&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:00:02&lt;/td&gt;
              &lt;td&gt;22.9&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:00:03&lt;/td&gt;
              &lt;td&gt;23.2&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&amp;hellip; (thousands more)&lt;/td&gt;
              &lt;td&gt;&amp;hellip;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;After smoothing (Resolution: 100):&lt;/strong&gt;&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Time&lt;/th&gt;
              &lt;th&gt;Temperature (smoothed)&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:00:00&lt;/td&gt;
              &lt;td&gt;23.1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:00:01&lt;/td&gt;
              &lt;td&gt;23.1&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:00:02&lt;/td&gt;
              &lt;td&gt;23.0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;2020-07-07 10:00:03&lt;/td&gt;
              &lt;td&gt;23.0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&amp;hellip; (same count)&lt;/td&gt;
              &lt;td&gt;&amp;hellip;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The transformation preserves all original time points while reducing noise, resulting in smoother curves that maintain continuous lines without gaps.&lt;/p&gt;
]]></content><description>&lt;h1 id="transform-data">Transform data&lt;/h1>
&lt;p>Transformations are a powerful way to manipulate data returned by a query before the system applies a visualization. Using transformations, you can:&lt;/p>
&lt;ul>
&lt;li>Rename fields&lt;/li>
&lt;li>Join time series/SQL-like data&lt;/li>
&lt;li>Perform mathematical operations across queries&lt;/li>
&lt;li>Use the output of one transformation as the input to another transformation&lt;/li>
&lt;/ul>
&lt;div class="d-sm-flex flex-direction-row-reverse bg-gray-1 br-12 p-2 my-1">
&lt;img class="maxw-240 w-100p mb-1 lazyload" data-src="/media/docs/learning-journey/map.svg" width="237" height="154" alt="Grafana Learning Journeys">
&lt;div>
&lt;div class="h4 pt-0 pb-half fw-500">Start your learning experience with Grafana Learning Paths&lt;/div>
&lt;p class="pr-1 pb-half">Grafana Learning Paths provide a clear, structured path that leads you from beginner concepts to advanced use cases. Learn about this Grafana feature on &lt;a href="/docs/learning-journeys/data-transformation/">Transform data in a Grafana Cloud dashboard&lt;/a>.&lt;/p></description></item><item><title>Troubleshoot queries</title><link>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/troubleshoot-queries/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/troubleshoot-queries/</guid><content><![CDATA[&lt;h1 id=&#34;troubleshoot-queries&#34;&gt;Troubleshoot queries&lt;/h1&gt;
&lt;p&gt;This page provides information to solve common dashboard problems.&lt;/p&gt;
&lt;h2 id=&#34;i-get-different-results-when-i-rearrange-my-functions&#34;&gt;I get different results when I rearrange my functions&lt;/h2&gt;
&lt;p&gt;Function order is very important. Just like in math, the order that you place your functions can affect the result.&lt;/p&gt;
&lt;h2 id=&#34;inspect-your-query-request-and-response&#34;&gt;Inspect your query request and response&lt;/h2&gt;
&lt;p&gt;The most common problems are related to the query and response from your data source. Even if it looks
like a bug or visualization issue in Grafana, it is almost always a problem with the data source query or
the data source response. Start by inspecting your panel query and response.&lt;/p&gt;
&lt;p&gt;For more information, refer to 
    &lt;a href=&#34;/docs/grafana/v12.4/panels-visualizations/panel-inspector/#inspect-query-request-and-response-data&#34;&gt;Inspect request and response data&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;my-query-is-slow&#34;&gt;My query is slow&lt;/h2&gt;
&lt;p&gt;How many data points is your query returning? A query that returns lots of data points will be slow. Try this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;Query options&lt;/strong&gt;, limit the &lt;strong&gt;Max data points&lt;/strong&gt; returned.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Query options&lt;/strong&gt;, increase the &lt;strong&gt;Min interval&lt;/strong&gt; time.&lt;/li&gt;
&lt;li&gt;In your query, use a &lt;code&gt;group by&lt;/code&gt; function.&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="troubleshoot-queries">Troubleshoot queries&lt;/h1>
&lt;p>This page provides information to solve common dashboard problems.&lt;/p>
&lt;h2 id="i-get-different-results-when-i-rearrange-my-functions">I get different results when I rearrange my functions&lt;/h2>
&lt;p>Function order is very important. Just like in math, the order that you place your functions can affect the result.&lt;/p></description></item><item><title>Calculation types</title><link>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/calculation-types/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/visualizations/panels-visualizations/query-transform-data/calculation-types/</guid><content><![CDATA[&lt;h1 id=&#34;calculation-types&#34;&gt;Calculation types&lt;/h1&gt;
&lt;p&gt;The following table contains a list of calculations you can perform in Grafana. You can find these calculations in the &lt;strong&gt;Transform&lt;/strong&gt; tab and in the bar gauge, gauge, stat, and table visualizations.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Calculation&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;1st % - 99th %&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;1st - 99th percentile value.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;All nulls&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;True when all values are null&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;All unique values&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Array with all unique values&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;All values&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Array with all values&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;All zeros&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;True when all values are 0&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Change count&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Number of times the field&amp;rsquo;s value changes&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Count&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Number of values in a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Delta&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Cumulative change in value, only counts increments&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Difference&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Difference between first and last value of a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Difference percent&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Percentage change between first and last value of a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Distinct count&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Number of unique values in a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;First&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;First value in a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;First* (not null)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;First, not null value in a field (also excludes NaNs)&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Last&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Last value in a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Last* (not null)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Last, not null value in a field (also excludes NaNs)&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Max&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Maximum value of a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Median&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Median value of all values in a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Mean&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Mean value of all values in a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Min&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Minimum value of a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Min (above zero)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Minimum, positive value of a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Range&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Difference between maximum and minimum values of a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;StdDev&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Standard deviation of all values in a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Step&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Minimal interval between values of a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Total&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Sum of all values in a field&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Variance&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Variance of all values in a field&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;]]></content><description>&lt;h1 id="calculation-types">Calculation types&lt;/h1>
&lt;p>The following table contains a list of calculations you can perform in Grafana. You can find these calculations in the &lt;strong>Transform&lt;/strong> tab and in the bar gauge, gauge, stat, and table visualizations.&lt;/p></description></item></channel></rss>