

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# データのクエリと変換
<a name="v9-panels-query-xform"></a>

****  
このドキュメントのトピックは、**Grafana バージョン 9.x** をサポートする Grafana ワークスペース向けです。  
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 10 での作業](using-grafana-v10.md)」を参照してください。  
Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 8 での作業](using-grafana-v8.md)」を参照してください。

Grafana は、さまざまなタイプの[データソース ](AMG-data-sources.md)をサポートしています。データソース*[クエリ]*は、Grafana が*変換*および視覚化できるデータを返します。各データソースは独自のクエリ言語を使用し、データソースプラグインはそれぞれクエリエディタと呼ばれるクエリ構築ユーザーインターフェイスを実装します。

## クエリについて
<a name="v9-panels-query-xform-about"></a>

Grafana パネルは、クエリを介してデータソースと通信します。このクエリは、視覚化用のデータを取得します。クエリは、データソースで使用されるクエリ言語で記述された質問です。

パネルのデータソースオプションで、クエリの頻度とデータ収集の制限を設定できます。Grafana は、パネルごとに最大 26 個のクエリをサポートします。

各データソースのクエリ言語の詳細については、[「データソース」](AMG-data-sources.md)セクションを参照してください。

**クエリエディタ**

各データソースの*クエリエディタ*には、独自の機能を活用するクエリの作成に役立つカスタマイズされたユーザーインターフェイスが用意されています。

クエリ言語の違いにより、各データソースクエリエディタの外観と関数は異なります。データソースによっては、クエリエディタが自動補完機能、メトリクス名、変数の提案、ビジュアルクエリ構築インターフェイスを提供する場合があります。

特定のデータソースの一意のクエリエディタ機能の詳細については、以下の各ドキュメントを参照してください。
+ Grafana に含まれるデータソースについては、「[組み込みデータソース](AMG-data-sources-builtin.md)」を参照してください。
+ Grafana Enterprise の編集に含まれるデータソースについては、「[Enterprise データソースに接続する](AMG-data-sources-enterprise.md)」を参照してください。

**クエリ構文**

データソースは、異なるクエリ言語を使用してデータをリクエストします。特定のデータソースの一意のクエリ言語の詳細については、各ドキュメントを参照してください。

**[PostgreSQL の例]**:

```
SELECT hostname FROM host WHERE region IN($region)
```

**PromQL の例**:

```
query_result(max_over_time(<metric>[${__range_s}s]) != <state>)
```

**[特別なデータソース]**

Grafana には、**[Grafana]**、**[混合]**、および **[ダッシュボード]** の 3 つの特別なデータソースも含まれています。詳細については、「データソース」を参照してください。

## クエリタブを操作する
<a name="v9-panels-query-xform-navigate"></a>

パネルの **[クエリ]** タブは、次の要素で構成されます。
+ **[データソースセレクタ]** – クエリが実行されるデータソースを選択します。
+ **[クエリオプション]** — 最大データ取得パラメータとクエリ実行時間間隔を設定します。
+ **[クエリインスペクターボタン]** — クエリインスペクターパネルを開き、クエリを表示および最適化できます。
+ **[クエリエディタリスト]:** – 作成したクエリを一覧表示します。
+ **[式]:** – 式ビルダーを使用してアラート式を作成します。式の詳細については、「[クエリ式の書き込み](v9-panels-query-xform-expressions.md)」を参照してください。

## クエリの追加
<a name="v9-panels-query-xform-add"></a>

クエリは、Grafana がダッシュボードパネルで視覚化するデータを返します。パネルを作成すると、Grafana は自動的にデフォルトのデータソースを選択します。

**クエリを追加するには**

1. クエリを追加するパネルを編集します。

1. **[クエリ]** タブを選択します。

1. **[データソース]** ドロップダウンメニューを選択し、データソースを選択します。

1. **[クエリオプション]** を選択して、必要なデータポイントの最大数を設定します。クエリオプションの詳細については、「[クエリオプション](#v9-panels-query-xform-options)」を参照してください。

1. クエリエディタを使用してクエリを書き込みます。

1. **[適用]** を選択します。

Grafana はデータソースにクエリを実行し、データを視覚化します。

## クエリの管理
<a name="v9-panels-query-xform-manage"></a>

Grafana は、クエリを折りたたみ可能なクエリ行に整理します。各クエリ行にはクエリエディタが含まれ、文字 (A、B、C など) で識別されます。

クエリを管理するには、クエリのコピー、クエリの非表示、クエリの削除、クエリの順序変更、クエリエディタのヘルプの切り替えを行うことができます。

## クエリオプション
<a name="v9-panels-query-xform-options"></a>

データソースセレクタの横にある **[クエリオプション]** を選択すると、選択したデータソースの設定が表示されます。ここで行った変更は、このパネルで行われたクエリにのみ影響します。

Grafana は、ダークグレーテキストで表示されるデフォルトを設定します。変更はホワイトテキストで表示されます。フィールドをデフォルト設定に戻すには、フィールドからホワイトテキストを削除します。

パネルデータソースのクエリオプションには以下が含まれます。
+ **[最大データポイント数]** – データソースがサポートしている場合、返される各系列の最大データポイント数を設定します。クエリが最大データポイント設定よりも多くのデータポイントを返す場合、データソースは、平均、最大、または別の関数でデータポイントを集約することで、返されるポイント数を減らします。

  ポイントの数を制限して、クエリのパフォーマンスを向上させたり、視覚化された行を平滑にしたりできます。デフォルト値はグラフの幅 (またはピクセル数) です。グラフパネルに表示されるスペースと同じ数のデータポイントしか視覚化できないためです。

  ストリーミングデータでは、Grafana はローリングバッファの最大データポイント値を使用します。ストリーミングはデータの継続的なフローであり、バッファリングはストリームをチャンクに分割します。例えば、Loki はライブテーリングモードでデータをストリーミングします。
+ **[最小間隔]** – 自動計算された間隔の最小制限を設定します。これは通常、最小スクレイプ間隔です。データポイントを 15 秒ごとに保存する場合、それよりも間隔を短くしてもメリットはありません。また、スクレイプ間隔よりも低い最小値に設定して、粗く適切に機能するクエリを取得することもできます。
+ **[間隔]** – データポイントを時間別に集計またはグループ化するときに使用できる時間範囲を設定します。

  Grafana は、テンプレートクエリで変数として使用できる適切な間隔を自動的に計算します。変数は、秒 (`$__interval`) またはミリ秒 (`$__interval_ms`) で測定されます。

  間隔は通常、合計や平均などの集計関数で使用されます。例えば、これは間隔変数 `rate(http_requests_total[$__interval])` を使用する Prometheus クエリです。

  この自動間隔は、グラフの幅に基づいて計算されます。ユーザーがグラフを縮小すると、間隔が大きくなり、より粗視化された集計になります。同様に、ユーザーが拡大すると、間隔が短くなり、より高精細な集計になります。

  詳細については、「[グローバル変数](v9-dash-variable-add.md#v9-dash-variable-add-global)」を参照してください。
+ **[相対時間]** – 個々のパネルの相対時間範囲をオーバーライドします。これにより、パネルは、ダッシュボードの右上隅にあるダッシュボードタイムピッカーで選択されている時間とは異なります。これを使用して、同じダッシュボードに異なる期間または日数のメトリクスを表示できます。
**注記**  
ダッシュボードの時間範囲が絶対時間である場合、パネルの時間オーバーライドは効果がありません。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/grafana/latest/userguide/v9-panels-query-xform.html)
+ **[タイムシフト]** – タイムピッカーに対して開始と終了をシフトすることで、個々のパネルの時間範囲をオーバーライドします。例えば、パネルの時間範囲をダッシュボードのタイムピッカーより 2 時間早くシフトできます。
**注記**  
ダッシュボードの時間範囲が絶対時間である場合、パネルの時間オーバーライドは効果がありません。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/grafana/latest/userguide/v9-panels-query-xform.html)
+ **[キャッシュタイムアウト]** – *(データソースで使用可能な場合のみ表示)* 時系列ストアにクエリキャッシュがある場合、デフォルトのキャッシュタイムアウトをオーバーライドします。この値を秒単位で数値として指定します。

# クエリ式の書き込み
<a name="v9-panels-query-xform-expressions"></a>

****  
このドキュメントのトピックは、**Grafana バージョン 9.x** をサポートする Grafana ワークスペース向けです。  
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 10 での作業](using-grafana-v10.md)」を参照してください。  
Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 8 での作業](using-grafana-v8.md)」を参照してください。

サーバー側の式を使用すると、演算やその他のオペレーションでクエリから返されるデータを操作できます。式は新しいデータを作成し、データソースから返されるデータを操作しません。

## 式について
<a name="v9-panels-query-about"></a>

サーバー側の式を使用すると、演算やその他のオペレーションでクエリから返されるデータを操作できます。式は新しいデータを作成し、式のデータを許容できる入力にするためにマイナーなデータ再構築を行う以外は、データソースから返されるデータを操作しません。

**式の使用**

式は主に [Grafana アラート](v9-alerts.md)によって使用されます。処理はサーバー側で行われるため、式はブラウザセッションなしで動作できます。ただし、式はバックエンドデータソースや視覚化でも使用できます。

**注記**  
式は、レガシーダッシュボードアラートでは機能しません。

式は、異なるデータソースからのクエリを組み合わせて有効にするか、データソースで使用できない演算を提供することで、データソースを補強することを目的としています。

**注記**  
可能であれば、データソース内でデータ処理を行う必要があります。ストレージから Grafana サーバーにデータをコピーして処理することは非効率であるため、式は軽量データ処理を対象としています。

式は、時系列または数値データを返すデータソースクエリで機能します。また、[多次元データ](getting-started-grafanaui.md#time-series-dimensions)でも動作します。例えば、複数の系列を返すクエリでは、各系列がラベルまたはタグで識別されます。

個々の式は 1 つ以上のクエリまたはその他の式を入力として受け取り、結果にデータを追加します。個々の式またはクエリは、RefID と呼ばれる名前付き識別子 (例: デフォルト文字 `A` または `B`) である変数で表されます。

個々の式または別の式にあるデータソースクエリの出力を参照するには、この識別子を変数として使用します。

**式のタイプ**

式は 2 種類のデータで動作します。
+ 時系列のコレクション。
+ 数値のコレクション (各数値は項目)。

各コレクションは、単一のデータソースクエリまたは式から返され、RefID で表されます。各コレクションはセットであり、セット内の各項目は、[ラベル](getting-started-grafanaui.md#labels)またはキーと値のペアとして保存されるディメンションによって一意に識別されます。

**データソースクエリ**

サーバー側の式は、バックエンドデータソースのデータソースクエリのみをサポートします。データは一般に、時系列データにラベル付けされているものと見なされます。将来的には、式がエラーをより適切に処理できるように、クエリの戻り値の型 (数値または時系列) データのアサーションを追加する予定でした。

データソースクエリは、式とともに使用されると、式エンジンによって実行されます。これを行うと、データはデータフレームごとに 1 つの時系列または 1 つの数値に再構成されます。例えば、テーブルビューの 1 つのフレームで複数の系列を返すデータソースを使用する場合、式で実行したときに異なるように見えることがあります。

現在、データフレームを使用する場合にサポートされる時系列以外の形式 (数値) は、時間、文字列の列、1 つの数値列のないデータフレームを返すテーブルレスポンスのみです。


| Loc | ホスト | Avg\$1CPU | 
| --- | --- | --- | 
|  MIA  |  A  |  1  | 
|  NYC  |  B  |  2  | 

上記の例では、式で動作する数値を生成します。文字列の列はラベルになり、数値列は対応する値になります。例えば、`{"Loc": "MIA", "Host": "A"}` の値は 1 です。

**オペレーション**

式には math、reduce、リサンプリング演算を使用できます。

**数値演算**

Math は、時系列または数値データに関する自由形式の数式です。Math 演算子では、数値と時系列を入力として受け取り、異なる数値と時系列に変更します。

他のクエリまたは式からのデータは、`$A` などのドル記号のプレフィックスが付いた RefID で参照されます。変数の名前にスペースがある場合は、`${my variable}` のような中括弧構文を使用できます。

数値定数は、10 進数 (`2.24`)、8 進数 (`072` のような先頭がゼロ)、または 16 進数 (`0x2A` のような先頭が 0x) にすることができます。指数と記号もサポートされています (例: `-0.8e-2`)。

**演算子**

算術演算子 (`+`、二項および単項 `-`、`*`、`/`、`%`、指数 `**`)、リレーショナル演算子 (`<`、`>`、`==`、`!=`、`>=`、`<=`)、論理演算子 (`&&`、`||`、および単項 `!`) がサポートされています。

データに対する演算処理は、数値データか時系列データかによって異なります。

`$A + $B` や `$A || $B` などの二項演算では、データのタイプに応じて、演算子は次の方法で適用されます。
+ `$A` と `$B` の両方が数値の場合、2 つの数値の間で演算が実行されます。
+ 1 つの変数が数値で、もう 1 つの変数が時系列の場合、時系列の各ポイントの値と数値との間の演算が実行されます。
+ `$A` と `$B` の両方が時系列データである場合、2 つの系列の各値間の演算は、`$A` と `$B` の両方に存在するタイムスタンプごとに実行されます。`Resample` 演算を使用してタイムスタンプを並べることができます。

まとめ
+ 数値 OP 数値 = 数値
+ 数値 OP 系列 = 系列
+ 系列 OP 系列 = 系列

式は 1 つの変数で表される複数の系列または数値で動作するため、二項演算は 2 つの変数間の統合 (結合) も実行します。これは、個々の系列または数値に関連付けられた識別ラベルに基づいて行われます。

したがって、`$A` にある `{host=web01}` のようなラベルを持つ数値と、同じラベルを持つ `$B` に別の数値がある場合、各変数内のこれら 2 つの項目間で演算が実行され、結果は同じラベルを共有します。この統合の動作のルールは次のとおりです。
+ ラベルのない項目は、すべてに結合されます。
+ `$A` と `$B` の両方に 1 つの項目 (1 つの系列、または 1 つの数値) しか含まれていない場合、それらは結合されます。
+ ラベルが正確な数値演算である場合、それらは結合されます。
+ ラベルが他のサブセットである場合、例えば、`$A` の項目には `{host=A,dc=MIA}` ラベルが付けられ、`$B` の項目には `{host=A}` ラベルが付けられると結合されます。
+ 項目ごとに異なるタグキーがある `$A` などの変数内では、結合動作は不定です。

リレーショナル演算子と論理演算子は、偽の場合は 0、真の場合は 1 を返します。

**数値演算関数**

ほとんどの関数は独自の式の演算にありますが、数値演算関数には、数学演算子や数学記号に似た関数がいくつかあります。関数が数値または系列のいずれかを取ることができる場合、引数と同じタイプが返されます。系列の場合、系列内の各ポイントの値に対して演算が実行されます。

*abs*

abs は、引数の絶対値を返します。これは、数値または系列です。例えば、`abs(-1)`、`abs($A)` などです。

*is\$1inf*

is\$1inf は数値または系列を取得し、`Inf` 値 (負または正) の `1` と他の値の `0` を返します。例えば、`is_inf($A)` などです。

**注記**  
例えば、負の無限大を具体的にチェックする必要がある場合は、`$A == infn()` のような比較を行うことができます。

*is\$1nan*

is\$1nan は数値または系列を取得し、`NaN` 値の `1` と他の値の `0` を返します。例えば、`is_nan($A)` などです。この関数は、`NaN` が `NaN` と等しくないために存在します。

*[is\$1null]*

is\$1null は数値または系列を取得し、`null` 値の `1` と他の値の `0` を返します。例えば、`is_null($A)` などです。

*is\$1number*

is\$1number は数値または系列を取得し、すべての実数値の `1` と他の値 (`null`、`Inf+`、`Inf-`、および `NaN`) の `0` を返します。例えば、`is_number($A)` などです。

*log*

Log は、引数の自然対数を返します。これは、数値または系列です。値が 0 未満の場合、`NaN` が返されます。例えば、`log(-1)`、`log($A)` などです。

*[inf、infn、nan、null]*

inf、infn、nan、null 関数はすべて、名前の単一の値を返します。これらは主にテスト用です。例えば、`null()` などです。

*round*

Round は、丸められた整数値を返します。例えば、`round(3.123)`、`round($A)` です。

*ceil*

Ceil は、数値を最も近い整数値に切り上げます。例えば、`ceil(3.123)` は `4` を返します。

*floor*

Floor は、数値を最も近い整数値に切り下げます。例えば、`floor(3.123` は `3` を返します。

**[削減]**

Reduce は、クエリまたは式から返される 1 つ以上の時系列を取得し、各系列を 1 つの数値に変換します。時系列のラベルは、それぞれ出力される削減された数値のラベルとして保持されます。

*[フィールド]*
+ **[関数]** – 使用する削減関数
+ **[入力]** – リサンプリングする変数 (refID (`A` など))
+ **[モード]** – 系列に数値以外の値が含まれている場合、削減関数の制御動作を許可します (null、NaN 、\$1-Inf)

**削減関数**

*Count*

Count は、各系列内のポイント数を返します。

*Mean*

Mean は、各系列のすべての値の合計を、その系列のポイント数で割った値を返します。`strict` モードでは、系列内の値が null または nan の場合、または系列が空の場合、NaN が返されます。

*[最小 と 最大]*

最小 と 最大は、系列内の最小値または最大値をそれぞれ返します。`strict` モードでは、系列内の値が null または nan の場合、または系列が空の場合、NaN が返されます。

*Sum*

Sum は、系列のすべての値の合計を返します。系列の長さがゼロの場合、合計は 0 になります。`strict` モードでは、系列内の値に NaN または Null がある場合、NaN が返されます。

*Last*

Last は、系列内の最後の数値を返します。系列に値がない場合は、NaN を返します。

**制限モード**

*Strict*

Strict モードでは、入力系列はそのまま処理されます。系列内の値が数値以外の場合 (null、NaN、または \$1-Inf)、NaN が返されます。

*Drop Non-Numeric*

このモードでは、入力系列内のすべての非数値 (null、NaN、または \$1-Inf) は、制限関数を実行する前に除外されます。

*Replace Non-Numeric*

このモードでは、数値以外の値はすべて事前定義された値に置き換えられます。

**[リサンプリング]**

リサンプリングでは、各時系列のタイムスタンプが一貫した時間間隔になるように変更されます。主なユースケースは、同じタイムスタンプを共有しない時系列をリサンプリングして、それらの間で演算を実行できるようにすることです。これは、2 つの系列をそれぞれリサンプリングし、リサンプリングされた変数を参照する Math 演算で行うことができます。

*[フィールド]*
+ **[入力]** – リサンプリングする時系列データの変数 (refID (`A` など))
+ **[リサンプリング先]** – リサンプリング先となる期間は、例えば、`10s.` 単位は `s` 秒、`m` 分、`h` 時間、`d` 日、`w` 週、`y` 年です。
+ **[ダウンサンプリング]** – ウィンドウサンプルごとに複数のデータポイントがある場合に使用する制限関数。動作の詳細については、「制限関数」を参照してください。
+ **[アップサンプリング]** – データポイントがないウィンドウサンプルを埋めるために使用するメソッド。
  + **pad** で最後の既知の値に置換
  + **backfill** で次の既知の値に置換
  + **fillna** で空のサンプルウィンドウを NaN に置換

## 式の書き込み
<a name="v9-panels-query-write"></a>

データソースがサポートしている場合、Grafana は **[式]** ボタンを表示し、クエリエディタリストに既存の式を表示します。

**式を記述するには**

1. パネルを開きます。

1. クエリの下で、**[式]** を選択します。

1. **[演算]** フィールドで、書き込む式のタイプを選択します。

1. 式を書き込みます。

1. **[適用]** を選択します。

## 特殊なケース
<a name="v9-panels-query-special"></a>

クエリされたデータソースが系列や数値を返さない場合、式エンジンは `NoData` を返します。例えば、式によってマージされた 2 つのデータソースクエリがリクエストに含まれている場合、`NoData` が少なくとも 1 つのデータソースクエリによって返された場合、クエリ全体で返される結果は `NoData` になります。Grafana アラートが `NoData` 結果を処理する方法の詳細については、「[データがない場合やエラーが発生した場合の対処](v9-alerting-managerules-grafana.md#v9-alerting-rule-no-data-error)」を参照してください。

# 別のパネルとクエリ結果を共有する
<a name="v9-panels-query-share"></a>

****  
このドキュメントのトピックは、**Grafana バージョン 9.x** をサポートする Grafana ワークスペース向けです。  
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 10 での作業](using-grafana-v10.md)」を参照してください。  
Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 8 での作業](using-grafana-v8.md)」を参照してください。

Grafana では、ダッシュボード内にある他の任意のパネルに対して、1 つのパネルからのクエリ結果を使用できます。パネル間でクエリ結果を共有すると、データソースに対して実行されるクエリの数が減少し、ダッシュボードのパフォーマンスが向上します。

ダッシュボードのデータソースを使用すると、結果を共有するクエリを含むダッシュボード内のパネルを選択できます。パネルごとに個別のクエリを送信する代わりに、Grafana は 1 つのクエリを送信し、他のパネルはクエリ結果を使用して視覚化を構築します。

この戦略は、例えば、同じデータを視覚化する複数のパネルがある場合に実行されるクエリの数を大幅に減らすことができます。

**クエリ結果を共有するには**

1. [ダッシュボードを作成](v9-dash-creating.md)します。

1. タイトルを「`Source panel`」に変更します。このパネルを他のパネルのソースとして使用します。

1. 共有するクエリを (複数) 定義します。

   利用可能なデータソースがない場合は、**[TestData]** データソースを使用します。このデータソースは、テストに使用できるランダムな時系列を返します。

1. 2 番目のパネルを追加し、クエリエディタで **[ダッシュボード]** データソースを選択します。

1. **[パネルリストから結果を使用する]** で、最初に作成したパネルを選択します。

ソースパネルで定義されたすべてのクエリが新しいパネルで使用できるようになりました。ソースパネルで行われたクエリは、複数のパネルと共有できます。

任意のクエリをクリックして、そのクエリが定義されたパネルに移動できます。

# [データを変換する]
<a name="v9-panels-xform"></a>

****  
このドキュメントのトピックは、**Grafana バージョン 9.x** をサポートする Grafana ワークスペース向けです。  
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 10 での作業](using-grafana-v10.md)」を参照してください。  
Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 8 での作業](using-grafana-v8.md)」を参照してください。

変換は、システムが視覚化を適用する前に、クエリによって返されるデータを操作できる強力な方法です。変換を使用すると、次のことができます。
+ フィールド名の変更
+ 時系列データの結合
+ クエリ間で数学演算の実行
+ ある変換の出力を別の変換への入力として使用

同じデータセットの複数のビューに依存するユーザーにとって、変換は多数のダッシュボードを作成および維持する効率的な方法を提供します。

また、ある変換の出力を別の変換への入力として使用して、パフォーマンスを向上させることもできます。

**注記**  
システムが変換されたデータをグラフ化できない場合があります。その場合は、視覚化の上にある **[テーブルビュー]** のトグルをクリックして、データのテーブルビューに切り替えます。これは、変換の最終結果を理解するのに役立ちます。

## 変換タイプ
<a name="v9-panels-xform-types"></a>

Grafana には、データを変換するさまざまな方法があります。変換関数の完全なリストを以下に示します。

## 変換の順序
<a name="v9-panels-xform-order"></a>

複数の変換がある場合、Grafana はリスト順で変換を適用します。各変換では、処理中のパイプラインにある次の変換に渡される新しい結果セットが作成されます。

Grafana が変換を適用する順序は、結果に直接影響します。例えば、縮小変換を使用して 1 つの列のすべての結果を 1 つの値に集約する場合、変換はその 1 つの値にのみ適用できます。

## 変換関数をデータに追加する
<a name="v9-panels-xform-add"></a>

次の手順は、データに変換を追加する方法を示しています。

**パネルに変換を追加するには**

1. 1 つ以上の変換を追加するパネルに移動します。

1. パネルタイトルを選択し、**[編集]** をクリックします。

1. **[変換]** タブを選択します。

1. 変換を選択します。変換オプションを設定する変換行が表示されます。

1. **[変換ルールの追加]** を選択すると、別の変換ルールを追加できます。この変換は、前の変換が返した結果セットに作用します。

## 変換をデバッグする
<a name="v9-panels-xform-debug"></a>

変換の入力および出力結果のセットを表示するには、変換行の右側にあるバグアイコンを選択します。

入出力の結果セットにより、変換のデバッグが可能になります。

## 変換を削除する
<a name="v9-panels-xform-delete"></a>

不要な変換を削除することをお勧めします。変換を削除すると、視覚化からデータが削除されます。

前提条件:

変換に依存するすべてのダッシュボードを特定し、影響を受けるダッシュボードのユーザーに通知します。

**変換を削除するには**

1. パネルを開いて編集します。

1. **[変換]** タブを選択します。

1. 削除する変換の横にあるごみ箱アイコンを選択します。

## 変換関数
<a name="v9-panels-xform-functions"></a>

データに関する次の変換を実行できます。

**計算からのフィールドの追加**

この変換を使用して、他の 2 つのフィールドから計算した新しいフィールドを追加します。各変換では 1 つの新しいフィールドを追加できます。
+ **[モード]** – 以下のモードを選択します。
  + **[行を減らす]** – 選択したフィールドの各行に、選択済みの計算を個別に適用します。
  + **[二項演算]** – 選択した 2 つのフィールドから 1 行の値に基本的な二項演算 (合計や乗算など) を適用します。
+ **[Field name]** – 新しいフィールドの計算に使用する、フィールドの名前を選択します。
+ **[計算]** – **[掃き出し法]** を選択すると、**[計算]** フィールドが表示されます。フィールドをクリックして、新しいフィールドの作成に使用できる計算選択肢のリストを表示します。使用可能な計算の詳細については、「[計算タイプ](v9-panels-calculation-types.md)」を参照してください。
+ **[演算]** – **[二項演算]** モードを選択すると、**[演算]** フィールドが表示されます。これらのフィールドを使用すると、2 つの選択したフィールドから 1 行の値に対して基本的な数学演算を実行できます。二項演算に数値を使用することもできます。
+ **[エイリアス]** – (オプション) 新しいフィールドの名前を入力します。このフィールドを空白のままにすると、計算に一致するようにフィールドの名前が付けられます。
+ **[すべてのフィールドを置き換え]** – (オプション) 他のすべてのフィールドを非表示にし、計算したフィールドのみを視覚化に表示する場合は、このオプションを選択します。

**[連結フィールド]**

この変換は、全フレームの全フィールドを 1 つの結果に結合します。この 2 つのクエリを検討します。

クエリ A


| 温度 | アップタイム | 
| --- | --- | 
|  15.4  |  1230233  | 

クエリ B


| AQI | エラー | 
| --- | --- | 
|  3.2  |  5  | 

フィールドを連結すると、データフレームは次のようになります。


| 温度 | アップタイム | AQI | エラー | 
| --- | --- | --- | --- | 
|  15.4  |  1230233  |  3.2  |  5  | 

**[クエリ結果から設定]**

この変換を使用して、1 つのクエリを選択し、そこから **[最小]** 、**[最大]** 、**[単位]**、**[しきい値]** などの標準オプションを抽出し、他のクエリ結果に適用できます。これにより、動的なクエリ駆動型の視覚化設定が可能になります。

設定クエリ結果の各行に対して一意の設定を抽出する場合は、行からフィールドへの変換を試行します。

**オプション**
+ **[Config query]** (設定クエリ) – 設定として使用するデータを返すクエリを選択します。
+ **[適用先]** – 設定を適用するフィールドまたは系列を選択します。
+ **[オプションに適用]** – 通常は、**[適用先]** で選択したオプションに応じて、フィールドタイプまたはフィールド名の正規表現を使用します。

**[フィールドタイプの変換]**

この変換により、指定されたフィールドのフィールドタイプが変更されます。
+ **[Field]** – 使用可能なフィールドから選択
+ **[as]** – 変換するフィールドタイプを選択
  + **[Numeric]** – 値の数値の作成を試行
  + **[String]** – 値の文字列を作成
  + **[時間]** – 値を時間として解析
    + yyyy-mm-dd や DD MM YYYY hh:mm:ss などの文字列の入力として DateFormat を指定するオプションを表示
  + **[Boolean]** – 値はブール値となる

例えば、次のクエリでは、時間フィールドを Time として、日付形式を YYYY として選択することで変更できます。


| Time | Mark | 値 | 
| --- | --- | --- | 
|  7/1/2017  |  above  |  25  | 
|  8/2/2018  |  below  |  22  | 
|  9/2/2019  |  below  |  29  | 
|  10/4/2020  |  above  |  22  | 

結果


| Time | Mark | 値 | 
| --- | --- | --- | 
|  1/1/2017  |  above  |  25  | 
|  1/1/2018  |  below  |  22  | 
|  1/1/2019  |  below  |  29  | 
|  1/1/2020  |  above  |  22  | 

**[名前によるデータのフィルタリング]**

この変換を使用してクエリ結果の一部を削除します。

Grafana は **[Identifier]** (識別子) フィールドを表示し、続いてクエリによって返されるフィールドを表示します。

フィルターは次の 2 つのいずれかの方法で適用できます。
+ 正規表現を入力します。
+ フィールドを選択してフィールドのフィルタリングを切り替えます。フィルタリングされたフィールドにはダークグレーテキストが表示され、フィルタリングされていないフィールドには白いテキストが表示されます。

**[クエリによるデータのフィルタリング]**

1 つ以上のクエリを非表示にするには、複数のクエリがあるパネルでこの変換を使用します。

Grafana では、クエリ識別文字がダークグレーテキストで表示されます。フィルタリングを切り替えるには、クエリ識別子をクリックします。クエリ文字が白い場合、結果が表示されます。クエリ文字が暗い場合、結果は非表示です。

**注記**  
この変換は Graphite では使用できません。このデータソースは、返されたデータとクエリの相関関係をサポートしていないためです。

**[値によるデータのフィルタリング]**

この変換により、Grafana でデータを直接フィルタリングして、クエリ結果から一部のデータポイントを削除できます。1 つ以上の定義済み条件と一致するデータを含めるか除外するかを選択できます。その条件は選択したフィールドに適用されます。

この変換はデータソースが値によりネイティブにフィルタリングしない場合に役立ちます。共有クエリを使用している場合、これを使用して値を絞り込んで表示することもできます。

すべてのフィールドで使用できる条件は次のとおりです。
+ **[Regex]** – 正規表現を照合
+ **[Is Null]** – 値が null の場合に照合
+ **[Is Not Null]** – 値が null でない場合に照合します。
+ **Equal** – 値が指定値と等しい場合に照合
+ **Different** – 値が指定された値と異なる場合に照合

数値フィールドで使用可能な条件は以下のとおりです。
+ **Greater** – 値が指定値より大きい場合に照合
+ **Lower** – 値が指定値よりも小さい場合に照合
+ **Greater or equal** – 値が指定値以上の場合に照合
+ **Lower or equal** – 値が指定値以下の場合に照合
+ **Range** – 指定された最小値と最大値 (最小値と最大値を含む) 間の範囲を照合します。

以下のデータセットを考慮します。


| Time | 温度 | 高度 | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 23 秒  |  32  |  101  | 
|  7/7/2020 午前 11 時 34 分 22 秒  |  28  |  125  | 
|  7/7/2020 午前 11 時 34 分 21 秒  |  26  |  110  | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  23  |  98  | 
|  7/7/2020 午前 10 時 32 分 24 秒  |  31  |  95  | 
|  7/7/2020 午前 10 時 31 分 22 秒  |  20  |  85  | 
|  7/7/2020 午前 9 時 30 分 57 秒  |  19  |  101  | 

温度が 30°C 未満のデータポイントを **[含める]** にすると、設定は次のようになります。
+ **フィルタータイプ** – `Include`
+ **[条件]** – `Temperature` が `Lower Than 30` と一致する行

30°C 未満の温度のみが含まれる場合、次の結果が得られます。


| Time | 温度 | 高度 | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 22 秒  |  28  |  125  | 
|  7/7/2020 午前 11 時 34 分 21 秒  |  26  |  110  | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  23  |  98  | 
|  7/7/2020 午前 10 時 31 分 22 秒  |  20  |  85  | 
|  7/7/2020 午前 9 時 30 分 57 秒  |  19  |  101  | 

複数の条件をフィルターに追加できます。例えば、高度が 100 を超える場合にのみデータを含めることができます。これを行うには、次の設定にその条件を追加します。
+ フィルタータイプ – `Match All` 条件を満たす `Include` 行
+ Condition 1 – `Temperature` が `30` より `Lower` に一致する行
+ Condition 2 – `Altitude` が `Greater` より `100` に一致する行

複数の条件がある場合、条件に**すべて一致**、または追加した条件の**いずれかに一致**する行にアクション (包含/除外) を適用するかを選択できます。

上記の例では、温度が 30°C 未満かつ高度が 100 を超える行を含めるため、**[すべて一致]** を選択しました。温度が 30°C 未満または高度が 100 を超える行を含める場合は、**[任意の一致]** を選択します。これには、元のデータの最初の行が含まれます。元のデータの温度は 32°C (最初の条件と一致しない) ですが、高度は 101 (2 番目の条件と一致する) であるため、含まれます。

無効または不完全な設定条件は無視されます。

**[グループ化の条件]**

この変換では、指定されたフィールド (列) 値でデータをグループ化し、各グループの計算を処理します。計算選択肢のリストの表示をクリックします。

オリジナルデータの例を次に示します。


| Time | サーバー ID | CPU 温度 | サーバーステータス | 
| --- | --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー 1  |  80  |  シャットダウン  | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー 3  |  62  |  OK  | 
|  7/7/2020 午前 10 時 32 分 20 秒  |  サーバー 2  |  90  |  オーバーロード  | 
|  7/7/2020 午前 10 時 31 分 22 秒  |  サーバー 3  |  55  |  OK  | 
|  7/7/2020 午前 9 時 30 分 57 秒  |  サーバー 3  |  62  |  再起動  | 
|  7/7/2020 午前 9 時 30 分 5 秒  |  サーバー 2  |  88  |  OK  | 
|  7/7/2020 午前 9 時 28 分 6 秒  |  サーバー 1  |  80  |  OK  | 
|  7/7/2020 午前 9 時 25 分 5 秒  |  サーバー 2  |  88  |  OK  | 
|  7/7/2020 午前 9:23:07  |  サーバー 1  |  86  |  OK  | 

この変換では 2 つのステップを実行します。まず、データをグループ化させる 1 つ以上のフィールドを指定します。これにより、これらのフィールドの同じ値すべてが、ソートされたかのようにグループ化されます。例えば、サーバー ID フィールドでグループ化すると、次のようにデータがグループ化されます。


| Time | サーバー ID | CPU 温度 | サーバーステータス | 
| --- | --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー 1  |  80  |  シャットダウン  | 
|  7/7/2020 午前 9 時 28 分 6 秒  |  サーバー 1  |  80  |  OK  | 
|  7/7/2020 午前 9:23:07  |  サーバー 1  |  86  |  OK  | 
|  7/7/2020 午前 10 時 32 分 20 秒  |  サーバー 2  |  90  |  オーバーロード  | 
|  7/7/2020 午前 9 時 30 分 5 秒  |  サーバー 2  |  88  |  OK  | 
|  7/7/2020 午前 9 時 25 分 5 秒  |  サーバー 2  |  88  |  OK  | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー 3  |  62  |  OK  | 
|  7/7/2020 午前 10 時 31 分 22 秒  |  サーバー 3  |  55  |  OK  | 
|  7/7/2020 午前 9 時 30 分 57 秒  |  サーバー 3  |  62  |  再起動  | 

同じ値のサーバー ID を持つすべての行がグループ化されます。

データをグループ化するフィールドを選択すると、他のフィールドにさまざまな計算を追加でき、その計算を行の各グループに適用できます。例えば、これらの各サーバーの平均 CPU 温度を計算できます。そのため、CPU 温度フィールドに適用される*[平均]*計算を追加して、以下を取得できます。


| サーバー ID | CPU 温度 (平均) | 
| --- | --- | 
|  サーバー 1  |  82  | 
|  サーバー 2  |  88.6  | 
|  サーバー 3  |  59.6  | 

また、複数の計算を追加できます。例:
+ 時間のフィールドでは、*[最後]*の値を計算して、各サーバーで最後のデータポイントがいつ受信されたかを把握できます。
+ サーバーステータスフィールドでは、*[最後]*の値を計算して、サーバーごとに最後の状態値を確認できます。
+ また、温度フィールドでは、*最後*の値を計算して、サーバーごとに最新の測定温度を知ることもできます。

その後、以下を取得します。


| サーバー ID | CPU 温度 (平均) | CPU 温度 (最新) | 時間 (最後) | サーバーステータス (最後) | 
| --- | --- | --- | --- | --- | 
|  サーバー 1  |  82  |  80  |  7/7/2020 午前 11 時 34 分 20 秒  |  シャットダウン  | 
|  サーバー 2  |  88.6  |  90  |  7/7/2020 午前 10 時 32 分 20 秒  |  オーバーロード  | 
|  サーバー 3  |  59.6  |  62  |  7/7/2020 午前 11 時 34 分 20 秒  |  OK  | 

この変換により、時系列からキー情報を抽出して便利な方法で表示できます。

**Join by field** (フィールドで結合)

この変換を使用して、複数の結果を 1 つのテーブルに結合します。これは、複数の時系列の結果を共有時間フィールドを持つ単一のワイドテーブルに変換する場合に特に便利です。

*Inner join* (内部結合)

内部結合は、選択したフィールドからすべてのテーブルが同じ値を共有する複数のテーブルからのデータをマージします。このタイプの結合では、すべての結果で値が一致しないデータを除外します。

この変換を使用して、複数のクエリの結果 (渡された結合フィールドまたは最初の列の組み合わせ) を 1 つの結果に結合し、正常な結合を実行できない行を削除します。

次の例では、2 つのクエリがテーブルデータを返します。内部結合変換を適用する前に、2 つの個別のテーブルとして視覚化されます。

クエリ A


| Time | ジョブ | アップタイム | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  ノード  |  25260122  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  postgre  |  123001233  | 
|  7/7/2020 午前 11 時 14 分 20 秒  |  postgre  |  345001233  | 

クエリ B


| Time | サーバー | エラー | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー 1  |  15  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  サーバー 2  |  5  | 
|  7/7/2020 午前 11 時 4 分 20 秒  |  サーバー 3  |  10  | 

内部結合変換を適用した後の結果は次のようになります。


| Time | ジョブ | アップタイム | サーバー | エラー | 
| --- | --- | --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  ノード  |  25260122  |  サーバー 1  |  15  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  postgre  |  123001233  |  サーバー 2  |  5  | 

*Outer join* (外部結合)

外部結合には、すべての入力で値が一致しない内部結合と行のすべてのデータが含まれます。内部結合が時間フィールドでクエリ A とクエリ B を結合している間、外部結合には時間フィールドで一致しないすべての行が含まれます。

次の例では、2 つのクエリがテーブルデータを返します。外部結合変換を適用する前に、2 つのテーブルとして視覚化されます。

クエリ A


| Time | ジョブ | アップタイム | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  ノード  |  25260122  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  postgre  |  123001233  | 
|  7/7/2020 午前 11 時 14 分 20 秒  |  postgre  |  345001233  | 

クエリ B


| Time | サーバー | エラー | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー 1  |  15  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  サーバー 2  |  5  | 
|  7/7/2020 午前 11 時 4 分 20 秒  |  サーバー 3  |  10  | 

外部結合変換を適用した後の結果は次のようになります。


| Time | ジョブ | アップタイム | サーバー | エラー | 
| --- | --- | --- | --- | --- | 
|  7/7/2020 午前 11 時 4 分 20 秒  |    |    |  サーバー 3  |  10  | 
|  7/7/2020 午前 11 時 14 分 20 秒  |  postgre  |  345001233  |    |    | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  ノード  |  25260122  |  サーバー 1  |  15  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  postgre  |  123001233  |  サーバー 2  |  5  | 

**[フィールドへのラベル付け]**

この変換により、ラベルまたはタグを含む時系列の結果がテーブルに変更され、各ラベルキーと値がテーブルの結果に含まれます。ラベルは、列または行の値として表示できます。

2 つの時系列のクエリ結果を示します。
+ 系列 1 – ラベル サーバー = サーバー A、データセンター = EU
+ 系列 2 – ラベル サーバー = サーバー B、データセンター = EU

**[列]** モードでは、結果は次のように表示されます。


| Time | サーバー | データセンター | 値 | 
| --- | --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー A  |  EU  |  1  | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー B  |  EU  |  2  | 

[Rows] (行) モードでは、結果には各系列のテーブルがあり、次のような各ラベル値が表示されます。


| ラベル | 値 | 
| --- | --- | 
|  サーバー  |  サーバー A  | 
|  データセンター  |  EU  | 


| ラベル | 値 | 
| --- | --- | 
|  サーバー  |  サーバー B  | 
|  データセンター  |  EU  | 

*値フィールド名*

**値フィールド名**としてサーバーを選択した場合、サーバーラベルの値ごとに 1 つのフィールドを取得します。


| Time | データセンター | サーバー A | サーバー B | 
| --- | --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  EU  |  1  |  2  | 

*マージ動作*

フィールドトランスフォーマーへのラベルは、内蔵されている 2 つの異なる変換です。1 つ目は、1 つの系列で動作し、ラベルをフィールドに抽出します。2 つ目は、すべての結果を 1 つのテーブルに結合するマージ変換です。マージ変換は、一致するすべてのフィールドで結合を試みます。このマージステップは必須であり、オフにすることはできません。

**注記**  
*[マージ]*変換は単独で使用でき、以下で詳細に説明します。

これを説明するために、重複ラベルのない時系列を返すクエリが 2 つある例を次に示します。
+ 系列 1 – ラベル サーバー = サーバー A
+ 系列 2 – ラベル データセンター = EU

これにより、まず次の 2 つのテーブルが作成されます。


| Time | サーバー | 値 | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー A  |  10  | 


| Time | データセンター | 値 | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  EU  |  20  | 

マージ後


| Time | サーバー | 値 | データセンター | 
| --- | --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  サーバー A  |  10  |    | 
|  7/7/2020 午前 11 時 34 分 20 秒  |    |  20  |  EU  | 

**Merge** (マージ)

この変換を使用して、複数クエリの結果を 1 つの結果にまとめます。これはテーブルパネルの視覚化を使用する場合に役立ちます。マージできる値は同じ行に結合されます。共有フィールドに同じデータが含まれている場合は値をマージできます。

次の例では、テーブルデータを返すクエリが 2 つあります。変換を適用する前に、2 つの個別のテーブルとして視覚化されます。

クエリ A


| Time | ジョブ | アップタイム | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  ノード  |  25260122  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  postgre  |  123001233  | 

クエリ B


| Time | ジョブ | エラー | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  ノード  |  15  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  postgre  |  5  | 

マージ変換を適用した後の結果は次のとおりです。


| Time | ジョブ | エラー | アップタイム | 
| --- | --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  ノード  |  15  |  25260122  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  postgre  |  5  |  123001233  | 

**[フィールドの整理]**

この変換を使用して、クエリが返すフィールドの名前を変更、並べ替え、非表示にします。

**注記**  
この変換は単一クエリを持つパネルでのみ機能します。パネルに複数のクエリがある場合は、外部結合変換を適用するか、追加のクエリを削除する必要があります。

Grafana では、クエリが返すフィールドのリストが表示されます。以下の操作を実行できます。
+ フィールドの上にカーソルを置いて、フィールドの順序を変更します。カーソルが手の形になると、フィールドを新しい場所にドラッグできます。
+ フィールド名の隣の目アイコンをクリックして、フィールドを非表示または表示します。
+ 名前変更ボックスに新しい名前を入力して、フィールドの名前を変更します。

**[値による分割]**

この変換により、複数の系列をグラフ化する際に、異なる `WHERE` 句を持つ同じデータソースへの複数のクエリが不要になります。次のデータを含むメトリクス SQL テーブルを検討します。


| Time | リージョン | 値 | 
| --- | --- | --- | 
|  10/20/2022 12:00:00 PM  |  米国  |  1520  | 
|  10/20/2022 12:00:00 PM  |  EU  |  2936  | 
|  10/20/2022 午前 1 時 00 分  |  米国  |  1327  | 
|  10/20/2022 午前 1 時 00 分  |  EU  |  912  | 

v9.3 より前では、US の赤いトレンドラインと EU の青いトレンドラインを同じ時系列パネルにプロットする場合は、これを 2 つのクエリに分割する必要があります。

```
SELECT Time, Value FROM metrics WHERE Time > '2022-10-20' AND Region='US'
SELECT Time, Value FROM metrics WHERE Time > '2022-10-20' AND Region='EU'
```

また、メトリクステーブルに実際に存在するリージョンを事前に知る必要があります。

*[値による分割]*トランスフォーマーを使用すると、単一のクエリを発行し、選択した 1 つ以上の列 (`fields`) に対して一意の値で結果を分割できるようになりました。次の例では `Region` を使用しています。

```
SELECT Time, Region, Value FROM metrics WHERE Time > '2022-10-20'
```


| Time | リージョン | 値 | 
| --- | --- | --- | 
|  10/20/2022 12:00:00 PM  |  米国  |  1520  | 
|  10/20/2022 午前 1 時 00 分  |  米国  |  1327  | 


| Time | リージョン | 値 | 
| --- | --- | --- | 
|  10/20/2022 12:00:00 PM  |  EU  |  2936  | 
|  10/20/2022 午前 1 時 00 分  |  EU  |  912  | 

**[削減]**

*[削減]* 変換は、フレーム内の各フィールドに計算を適用し、単一の値を返します。この変換を適用すると、時間フィールドは削除されます。

以下の入力を検討します。

クエリ A


| Time | Temp | アップタイム | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  12.3  |  256122  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  15.4  |  1230233  | 

クエリ B


| Time | AQI | エラー | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  6.5  |  15  | 
|  7/7/2020 午前 11 時 24 分 20 秒  |  3.2  |  5  | 

縮小のトランスフォーマーには 2 つのモードがあります。
+ **[シリーズから行]** – 各フィールドの行と各計算の列を作成します。
+ **[縮小フィールド]** – 既存のフレーム構造を維持しますが、各フィールドを 1 つの値に折りたたみます。

例えば、系列で **[最初]** と **[最後]** の計算を使用して **[シリーズから行]** 変換を行った場合、結果は次のようになります。


| フィールド | First | Last | 
| --- | --- | --- | 
|  Temp  |  12.3  |  15.4  | 
|  アップタイム  |  256122  |  1230233  | 
|  AQI  |  6.5  |  3.2  | 
|  エラー  |  15  |  5  | 

最後の計算における縮小フィールドは、それぞれ 1 行、2 つのフレームになります。

クエリ A


| 温度 | アップタイム | 
| --- | --- | 
|  15.4  |  1230233  | 

クエリ B


| AQI | エラー | 
| --- | --- | 
|  3.2  |  5  | 

**[正規表現で名前を変更]**

この変換を使用して、正規表現と置換パターンを使用してクエリ結果の一部の名前を変更します。

正規表現を指定できます。正規表現は、バックリファレンスをサポートする置換パターンとともに、一致にのみ適用されます。例えば、ホストあたりの CPU 使用率を視覚化し、ドメイン名を削除するとします。正規表現を `([^\.]+)\..+` に設定し、置換パターンを `$1` に設定することで、`web-01.example.com` は `web-01` になります。

**Rows to fields** (行からフィールドへ)

行からフィールドへの変換は、行を別々のフィールドに変換します。これは、フィールドを個別にスタイル変更および設定できるため便利です。また、動的フィールド設定のソースとして追加のフィールドを使用したり、フィールドラベルにマッピングしたりすることもできます。その後、追加のラベルを使用して、結果フィールドにより適切な表示名を定義できます。

この変換には、設定クエリによって返されるデータ内のすべてのフィールドを一覧表示するフィールドテーブルが含まれます。このテーブルでは、各設定プロパティにマッピングするフィールドを制御できます ([Use as] (用途) オプション)。返されるデータに複数の行がある場合、選択する値を選ぶこともできます。

この変換には以下が必要です。
+ フィールド名のソースとして使用する 1 つのフィールド。

  デフォルトでは、変換は最初の文字列フィールドをソースとして使用します。このデフォルト設定は、代わりに使用するフィールドの **[用途]** 列で **[フィールド名]** を選択してオーバーライドできます。
+ 値のソースとして使用する 1 つのフィールド。

  デフォルトでは、変換は最初の数値フィールドをソースとして使用します。ただし、このデフォルト設定は、代わりに使用するフィールドの **[用途]** 列で **[フィールド値]** を選択してオーバーライドできます。

以下にデータを視覚化する場合に役立ちます。
+ ゲージ
+ 統計
+ 円グラフ

*追加フィールドをラベルにマッピング*

フィールドが設定プロパティにマッピングされない場合、Grafana は出力フィールドのラベルのソースとして自動的に使用します。

例:


| 名前 | データセンター | 値 | 
| --- | --- | --- | 
|  サーバー A  |  米国  |  100  | 
|  サーバー B  |  EU  |  200  | 

出力:


| サーバー A (ラベル: データセンター: US) | サーバー B (ラベル: データセンター: EU) | 
| --- | --- | 
|  10  |  20  | 

フィールド表示名で追加のラベルを使用して、より完全なフィールド名を提供できるようになりました。

あるクエリから設定を抽出して別のクエリに適用する場合は、[クエリ結果から設定] 変換を使用する必要があります。

*例*

入力


| 名前 | 値 | 最大 | 
| --- | --- | --- | 
|  サーバー A  |  10  |  100  | 
|  サーバー B  |  20  |  200  | 
|  サーバー C  |  30  |  300  | 

出力


| サーバー A (設定: 最大=100) | サーバー B (設定: 最大=200) | サーバー C (設定: 最大=300) | 
| --- | --- | --- | 
|  10  |  20  |  30  | 

ソースデータ内の各行が個別のフィールドになります。各フィールドには、最大設定オプションも設定されるようになりました。最小値、最大値、単位、しきい値などのオプションはすべてフィールド設定の一部であり、このような設定を行うと、パネルエディタのオプションペインで手動設定されるオプションではなく、視覚化によって使用されます。

**[時系列の準備]**

時系列の準備変換は、データソースが、使用するパネルでサポートされていない形式で時系列データを返す場合に役立ちます。

この変換は、時系列データをワイド形式からロング形式、またはその逆に変換することで、この問題を解決するのに役立ちます。

**[マルチフレーム時系列]** オプションを選択して、時系列データフレームをワイド形式からロング形式に変換します。

**[ワイド時系列]** オプションを選択して、時系列データフレームをロング形式からワイド形式に変換します。

**[シリーズから行]**

この変換を使用して、複数の時系列データクエリの結果を 1 つの結果にまとめます。これはテーブルパネルの視覚化を使用する場合に役立ちます。

この変換の結果には、時間、メトリクス、値の 3 つの列が含まれます。メトリクス列が追加されると、メトリクスのソースとなるクエリを簡単に確認できます。ソースクエリのラベルを定義して、この値をカスタマイズします。

次の例では、時系列データを返すクエリが 2 つあります。変換を適用する前に、2 つの個別のテーブルとして視覚化されます。

クエリ A


| Time | 温度 | 
| --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  25  | 
|  7/7/2020 午前 10 時 31 分 22 秒  |  22  | 
|  7/7/2020 午前 9 時 30 分 5 秒  |  19  | 

クエリ B


| Time | 湿度 | 
| --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  24  | 
|  7/7/2020 午前 10 時 32 分 20 秒  |  29  | 
|  7/7/2020 午前 9 時 30 分 57 秒  |  33  | 

シリーズから行 変換を適用した後の結果は次のとおりです。


| Time | メトリクス | 値 | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  温度  |  25  | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  湿度  |  22  | 
|  7/7/2020 午前 10 時 32 分 20 秒  |  湿度  |  29  | 
|  7/7/2020 午前 10 時 31 分 22 秒  |  温度  |  22  | 
|  7/7/2020 午前 9 時 30 分 57 秒  |  湿度  |  33  | 
|  7/7/2020 午前 9 時 30 分 5 秒  |  温度  |  19  | 

**[並べ替え]**

この変換では、設定されたフィールドで各フレームがソートされます。`reverse` にチェックがついている場合、値は逆の順序で返されます。

**[制限]**

この変換を使用して、表示される行数を制限します。

次の例では、データソースから次のレスポンスがあります。


| Time | メトリクス | 値 | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  温度  |  25  | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  湿度  |  22  | 
|  7/7/2020 午前 10 時 32 分 20 秒  |  湿度  |  29  | 
|  7/7/2020 午前 10 時 31 分 22 秒  |  温度  |  22  | 
|  7/7/2020 午前 9 時 30 分 57 秒  |  湿度  |  33  | 
|  7/7/2020 午前 9 時 30 分 5 秒  |  温度  |  19  | 

以下は、値が「3」の制限変換を追加した後の結果です。


| Time | メトリクス | 値 | 
| --- | --- | --- | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  温度  |  25  | 
|  7/7/2020 午前 11 時 34 分 20 秒  |  湿度  |  22  | 
|  7/7/2020 午前 10 時 32 分 20 秒  |  湿度  |  29  | 

# クエリのトラブルシューティング
<a name="v9-panels-query-troubleshoot"></a>

****  
このドキュメントのトピックは、**Grafana バージョン 9.x** をサポートする Grafana ワークスペース向けです。  
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 10 での作業](using-grafana-v10.md)」を参照してください。  
Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 8 での作業](using-grafana-v8.md)」を参照してください。

このページでは、一般的なダッシュボードの問題を解決するための情報を提供します。

**関数を再配置すると、異なる結果が得られる**

関数の順序は非常に重要です。数学と同様に、関数を配置する順序は結果に影響を与える可能性があります。

**クエリリクエストとレスポンスを検査する**

最も一般的な問題は、データソースからのクエリとレスポンスに関連しています。Grafana のバグや視覚化の問題のように見えても、ほとんどの場合、データソースクエリまたはデータソースレスポンスの問題です。まず、パネルクエリとレスポンスを検査します。

詳細については、「[リクエストとレスポンスデータの検査](v9-panels-panel-inspector.md)」を参照してください。

**クエリが遅い**

クエリが返すデータポイントの数を確認してください。多くのデータポイントを返すクエリは遅くなります。解決策は以下のとおりです。
+ **[クエリオプション]**で、返される**[最大データポイント数]**を制限します。
+ **クエリオプション**で、**最小間隔**時間を長くします。
+ クエリで、`group by` 関数を使用します。