

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 转换
<a name="panel-transformations"></a>

****  
本文档主题专为支持 **Grafana 8.x 版本**的 Grafana 工作区而设计。  
有关支持 Grafana 版本 12.x 的 Grafana 工作空间，请参阅。[在 Grafana 版本 12 中工作](using-grafana-v12.md)  
对于支持 Grafana 10.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 10](using-grafana-v10.md)。  
对于支持 Grafana 9.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 9](using-grafana-v9.md)。

在结果集传递到可视化之前，转换会对其进行处理。您可以在 Amazon Managed Grafana 面板编辑器的**转换**选项卡中访问转换。

您可以使用转换来重命名字段，将单独的时间序列联接在一起，跨查询进行数学运算等。如果您的控制面板很大，或者查询量很大，那么能够将查询结果从一个面板复用到另一个面板可以带来巨大的性能提升。

**注意**  
转换有时会导致无法对数据绘图。发生这种情况时，Amazon Managed Grafana 会显示有关可视化的建议。选择建议以切换到表可视化。这通常可以帮助您更好地了解转换对您的数据执行了哪些操作。

Amazon Managed Grafana 按照屏幕上列出的顺序应用转换。每次转换都会创建一个新的结果集，该结果集将传递给管道中的下一个转换。

该顺序可以对结果的显示效果产生巨大影响。例如，如果您使用减少转换将一列的所有结果压缩为单个值，则只能对该单个值应用转换。

**先决条件**

在应用转换之前，必须满足以下所有条件：
+ 您已输入查询并从数据来源返回数据。有关查询的详细信息，请参阅[查询](panel-queries.md)。
+ 您应用了支持查询的可视化，例如以下可视化之一：
  + 条形仪表
  + 计量表
  + 图表
  + 热图
  + 日志
  + Stat
  + 表

## 应用转换
<a name="apply-a-transformation"></a>

 可以在面板编辑器底部窗格的**转换**选项卡（位于**查询**选项卡旁边）进行转换。

**要应用转换**

1.  在要添加转换的面板上，选择面板标题，然后选择**编辑**。

1.  选择 **Transform (转换)** 选项卡。

1.  选择一个转换。

    在出现的转换行中，您可以配置转换选项。

1.  要应用另一个转换，请选择**添加转换**。请记住，下一次转换对上一次转换返回的结果执行操作。

 如果您遇到问题，请选择调试图标来[调试您的转换](#debug-transformations)。

 要移除转换，请选择垃圾桶图标。

## 转换类型和选项
<a name="transformation-types-and-options"></a>

 Grafana 工作区包括以下转换。

**Topics**
+ [Reduce](#reduce)
+ [合并](#merge)
+ [按名称筛选](#filter-by-name)
+ [按查询筛选数据](#filter-data-by-query)
+ [整理字段](#organize-fields)
+ [按字段联接（外部联接）](#join-by-field-outer-join)
+ [从计算添加字段](#add-field-from-calculation)
+ [标签到字段](#labels-to-fields)
+ [分组依据](#sort-by)
+ [分组依据](#group-by)
+ [序列到行](#series-to-rows)
+ [按值筛选数据](#filter-data-by-value)
+ [调试转换](#debug-transformations)

### Reduce
<a name="reduce"></a>

 如果要将结果简化为一个值，请应用**减少**转换。减少基本上移除了时间部分。如果可视化为表，则会将一列较少为一行（值）。

 在**计算**字段中，输入一种或多种计算类型。选择以查看计算选项的列表。有关可用计算的信息，请参阅 [计算列表](list-of-calculations.md)。

在您选择了至少一个计算后，Amazon Managed Grafana 会使用您选择的计算显示一个值。如果选择多个计算，则显示多个值。

### 合并
<a name="merge"></a>

 使用此转换将来自多个查询的结果合并为一个结果。这在使用表面板可视化时很有用。可以合并的值将合并到同一行中。如果共享字段包含相同的数据，则可以合并值。

 在以下示例中，两个查询返回表数据。在应用转换之前，数据会被可视化为两个单独的表。

查询 A


|  时间  |  任务  |  正常运行时间  | 
| --- | --- | --- | 
|  2020-07-07 11:34:20  |  节点  |  25260122  | 
|  2020-07-07 11:24:20  |  postgre  |  123001233  | 

查询 B


|  时间  |  任务  |  错误  | 
| --- | --- | --- | 
|  2020-07-07 11:34:20  |  节点  |  15  | 
|  2020-07-07 11:24:20  |  postgre  |  5  | 

 以下是应用**合并**转换后的结果。


|  时间  |  任务  |  错误  |  正常运行时间  | 
| --- | --- | --- | --- | 
|  2020-07-07 11:34:20  |  节点  |  15  |  25260122  | 
|  2020-07-07 11:24:20  |  postgre  |  5  |  123001233  | 

### 按名称筛选
<a name="filter-by-name"></a>

 使用此转换可以移除部分查询结果。

 Amazon Managed Grafana 显示**标识符**字段，后面是您的查询返回的字段。

 您可以通过以下两种方式之一应用筛选器：
+  输入正则表达式。
+  选择一个字段以切换对该字段的筛选。筛选后的字段显示为深灰色文本，未筛选的字段包含白色文本。

### 按查询筛选数据
<a name="filter-data-by-query"></a>

 如果您想要隐藏一个或多个查询，请在包含多个查询的面板中使用此转换。

 Amazon Managed Grafana 以深灰色文本显示查询标识字母。要切换筛选，请选择查询标识。如果查询字母是白色的，则会显示结果。如果查询字母是深色的，则会隐藏结果。

### 整理字段
<a name="organize-fields"></a>

 使用此转换可以重命名、重新排序或隐藏查询返回的字段。

**注意**  
 此转换仅适用于具有单个查询的面板。如果您的面板有多个查询，则必须应用**按字段联接（外部联接）**转换或移除多余的查询。

 Amazon Managed Grafana 会显示查询返回的字段列表。您可以进行以下任意更改：
+  通过将光标悬停在字段上来更改字段顺序。光标变成一只手，然后您可以将该字段拖到新的位置。
+  通过选择字段名称旁边的眼睛图标隐藏或显示字段。
+  通过在**重命名**框中键入新名称来重命名字段。

### 按字段联接（外部联接）
<a name="join-by-field-outer-join"></a>

 使用此转换可以按字段联接结果集中的多个时间序列。

 如果要合并查询以便能够计算字段的结果，则此转换非常有用。

### 从计算添加字段
<a name="add-field-from-calculation"></a>

 使用此转换可以添加一个根据其他两个字段计算得出的新字段。每次转换都允许您添加一个新字段。
+  **模式**：选择一种模式：
  +  **减少行**：对选定字段的每一行分别应用所选计算。
  +  **二元选项**：对两个选定字段的单行中的值应用基本的数学运算（`sum`、`multiply` 等等）。
+  **字段名称**：选择要在新字段的计算中使用的字段名称。
+  **计算**：选择在 Amazon Managed Grafana 创建新字段时使用的计算。选择该字段以查看计算选项列表。有关可用计算的信息，请参阅 [计算列表](list-of-calculations.md)。
+  **别名**：（可选）输入新字段的名称。如果将此项保留为空，则将对该字段命名以与计算匹配。
+  **替换所有字段**：（可选）如果您想在可视化中隐藏所有其他字段并仅显示经过计算字段，请使用此选项。

### 标签到字段
<a name="labels-to-fields"></a>

**注意**  
 要应用此转换，您的查询需要返回带标签的字段。

 当您选择此转换时，Amazon Managed Grafana 会自动将所有带标签的数据转换为字段。

 例如，假设有一个查询结果包含两个时间序列。

 1：标签 Server=Server A、Datacenter=EU 2：标签 Server=Server B、Datacenter=EU 

 该转换会生成以下表。


|  时间  |  服务器  |  Datacenter  |  值  | 
| --- | --- | --- | --- | 
|  2020-07-07 11:34:20  |  Server A  |  EU  |  1  | 
|  2020-07-07 11:34:20  |  Server B  |  EU  |  2  | 

 **值字段名称**；如果您选择 `Server` 作为**值字段名称**，则 `Server` 标签的每个值都将获得一个字段。


|  时间  |  Datacenter  |  Server A  |  Server B  | 
| --- | --- | --- | --- | 
|  2020-07-07 11:34:20  |  EU  |  1  |  2  | 

### 分组依据
<a name="sort-by"></a>

此转换按已配置的字段对每个帧进行排序。选中 `reverse` 后，将按相反的顺序返回值。

### 分组依据
<a name="group-by"></a>

 此转换按指定的字段（列）值对数据进行分组，并处理每个组的计算。可用的计算与减少转换的计算相同。

 以下是原始数据的示例：


|  时间  |  Server ID  |  CPU 温度  |  服务器状态  | 
| --- | --- | --- | --- | 
|  2020-07-07 11:34:20  |  server 1  |  80  |  关闭  | 
|  2020-07-07 11:34:20  |  server 3  |  62  |  OK  | 
|  2020-07-07 10:32:20  |  server 2  |  90  |  过载  | 
|  2020-07-07 10:31:22  |  server 3  |  55  |  正常  | 
|  2020-07-07 09:30:57  |  server 3  |  62  |  Rebooting  | 
|  2020-07-07 09:30:05  |  server 2  |  88  |  OK  | 
|  2020-07-07 09:28:06  |  server 1  |  80  |  OK  | 
|  2020-07-07 09:25:05  |  server 2  |  88  |  OK  | 
|  2020-07-07 09:23:07  |  server 1  |  86  |  OK  | 

 该转换分两个步骤。首先，指定一个或多个字段作为数据分组依据。这会将这些字段的所有相同值分组到一起，就像对它们进行排序一样。例如，如果您按 `Server ID` 字段作为**分组依据**，它将按以下方式对数据进行分组：


|  时间  |  Server ID  |  CPU 温度  |  服务器状态  | 
| --- | --- | --- | --- | 
|  2020-07-07 11:34:20  |  server 1  |  80  |  关闭  | 
|  2020-07-07 09:28:06  |  server 1  |  80  |  OK  | 
|  2020-07-07 09:23:07  |  server 1  |  86  |  OK  | 

```
2020-07-07 10:32:20 | server 2 | 90 | Overload
2020-07-07 09:30:05 | server 2 | 88 | OK
2020-07-07 09:25:05 | server 2 | 88 | OK

2020-07-07 11:34:20 | server 3 | 62 | OK
2020-07-07 10:31:22 | server 3 | 55 | OK
2020-07-07 09:30:57 | server 3 | 62 | Rebooting
```

包含相同 `Server ID` 值的所有行将分组在一起。

选择作为数据分组依据的字段后，可以在其他字段上添加各种计算，计算将应用于每组行。例如，您可能想要计算每台服务器的 `CPU temperature` 平均值。您可以添加应用于 `CPU Temperature` 字段的*均值*计算以获得以下结果。


|  Server ID  |  CPU 温度（平均值）  | 
| --- | --- | 
|  server 1  |  82  | 
|  server 2  |  88.6  | 
|  server 3  |  59.6  | 

您可以添加多个计算。例如，您可以使用以下计算。
+  对于字段 `Time`，您可以计算*上次*值，以了解每台服务器上一个数据点的接收时间。
+  对于字段 `Server Status`，您可以计算*上次*值以了解每台服务器上一次的状态值。
+  对于字段 `Temperature`，您还可以计算*上次*值以了解每台服务器的最新监控温度。

 分组依据转换会产生以下结果。


|  Server ID  |  CPU 温度（平均值）  |  CPU 温度（上个值）  |  时间（上个值）  |  服务器状态（上个值）  | 
| --- | --- | --- | --- | --- | 
|  server 1  |  82  |  80  |  2020-07-07 11:34:20  |  关闭  | 
|  server 2  |  88.6  |  90  |  2020-07-07 10:32:20  |  过载  | 
|  server 3  |  59.6  |  62  |  2020-07-07 11:34:20  |  OK  | 

使用此转换，您可以从时间序列中提取一些关键信息，并以便捷的方式显示这些信息。

### 序列到行
<a name="series-to-rows"></a>

使用此转换可将多个时间序列数据查询的结果合并为一个结果。这在使用表面板可视化时很有用。

此转换的结果将包含三列：`Time`、`Metric` 和 `Value`。添加该 `Metric` 列是为了让您可以看到该指标来自哪个查询。通过在来源查询上定义 `Label` 来自定义此值。

在下面的示例中，两个查询返回时间序列数据。在应用转换之前，它被可视化为两个单独的表。

 查询 A 


|  时间  |  温度  | 
| --- | --- | 
|  2020-07-07 11:34:20  |  25  | 
|  2020-07-07 10:31:22  |  22  | 
|  2020-07-07 09:30:05  |  19  | 

 查询 B 


|  时间  |  湿度  | 
| --- | --- | 
|  2020-07-07 11:34:20  |  24  | 
|  2020-07-07 10:32:20  |  29  | 
|  2020-07-07 09:30:57  |  33  | 

 应用 `Series to rows` 转换会产生以下结果。


|  时间  |  指标  |  值  | 
| --- | --- | --- | 
|  2020-07-07 11:34:20  |  温度  |  25  | 
|  2020-07-07 11:34:20  |  湿度  |  22  | 
|  2020-07-07 10:32:20  |  湿度  |  29  | 
|  2020-07-07 10:31:22  |  温度  |  22  | 
|  2020-07-07 09:30:57  |  湿度  |  33  | 
|  2020-07-07 09:30:05  |  温度  |  19  | 

### 按值筛选数据
<a name="filter-data-by-value"></a>

此转换允许您直接在 Grafana 工作区中筛选数据，并从查询结果中移除一些数据点。您可以选择包含或排除与您定义的一个或多个条件相匹配的数据。这些条件将应用于选定的字段。

如果您的数据来源未按值进行本机筛选，则此转换非常有用。如果您使用的是共享查询，也可以使用它来缩小要显示的值的范围。

 所有字段的可用条件如下：
+  **正则表达式**：匹配正则表达式。
+  **为 Null 值**：如果值为 null 值，则匹配。
+  **为非 Null 值**：如果值为非 null 值，则匹配。
+  **等于**：如果值等于指定值，则匹配。
+  **不同**：如果值与指定值不同，则匹配。

数值字段的可用条件如下：
+  **大于**：如果值大于指定值，则匹配。
+  **小于**：如果值小于指定值，则匹配。
+  **大于或等于**：如果值大于或等于指定值，则匹配。
+  **小于或等于**：如果值小于或等于指定值，则匹配。
+  **范围**：与指定的最小值和最大值之间的范围匹配。最小值和最大值包含在范围内。

您可以向筛选器添加多个条件。当您有多个条件时，可以选择是否要对与添加的所有或任何条件匹配的行应用包含或排除操作。

无效或配置不完整的条件将被忽略。

### 调试转换
<a name="debug-transformations"></a>

要查看转换的输入和输出结果集，请选择转换行右侧的调试图标。

 Amazon Managed Grafana 在转换行下方显示转换调试视图。