Expression 機能は、既存の Query を加工して新しい Query を作成する機能です。
利用できる加工方法は以下のとおりです。なお、加工方法によって、データの個数が変わります。
| 加工方法 | 説明 | データの個数 |
|---|---|---|
| Math | 既存の Query に対して、四則演算 (+、-、*、/) や関数 (abs()、log() など) を利用して、新しい Query を作成します。利用できる関数については、 をクリックしてください。 | 計算に利用した Query と同じ個数 |
| Reduce | 既存の Query の Dashboard で表示する時間範囲 または Panel ごとに表示する時間範囲 における最小値などを、新しい Query として作成します。最小値、最大値、平均値、合計値、データ数、最終値を利用できます。 | 1 個 |
| Resample | 既存の Query を任意の時間間隔 (例: 10 分) で再集計して、新しい Query として作成します。再集計する方法は、最小値、最大値、平均、合計から選択できます。値が存在しない場合に補うこともできます。 | 指定した時間によって個数が異なる |
| Classic condition | 条件を満たす場合に 1 になり、条件を満たさない場合に 0 になる新しい Query を作成します。 | 1 個 |
| Threshold | 値が指定した値、または範囲に含まれる場合に 1 になり、そうでない場合に 0 になる新しい Query を作成します。 | 計算に利用した Query と同じ個数 |
データが表示されない場合は
データの個数が 1 個になる加工方法を選択した場合、Time series や Bar chart など、複数のデータの表示に適した Panel の種類 を選択しているときは、データが表示されません。Stat や Gauge など、1 個のデータを表示できる Panel の種類を選択してください。
Harvest Data に保存する前に Orbit で加工できます
Harvest Data に保存する前にデータを演算する Orbit も利用できます。
Expression のラベルは Transform で変更できます
グラフに表示される Expression のラベルは「B {property="temperature", resource="Device-1"}」のように、Query 名に加えて、計算対象の系列 (property)、リソース (resource) を含む場合があります。

Expression のラベルは、Transform を使って変更できます。詳しくは 系列名を一括変更する (Rename by regex) を参照してください。
詳しくは、Grafana documentation の Write expression queries (英語) を参照してください。
四則演算と関数を利用する (Math)
既存の Query に対して、四則演算 (+、-、*、/) や関数 (abs()、log() など) を利用して、新しい Query を作成できます。
摂氏 (°C) から華氏 (°F) に変換して新しい Query を作成する例
たとえば、摂氏 (°C) で保存されている温度データを、Panel では華氏 (°F) で表示できます。
Time series の Panel を作成し、「A」という名前の Query を作成します。
Query A に、サンプルデータソース (Demo) の Device-1 の temperature を指定します。

この「A」が摂氏 (°C) で保存されている温度データです。計算対象の Query です。
をクリックします。

「B」という名前の Expression が作成されます。
以下の項目を設定します。
項目 説明 「Math」を選択します。 摂氏 (°C) を、華氏 (°F) に変換する計算式 ( ${A} * 1.8 + 32) を入力します。${A}は、手順 1 で作成した、計算対象の Query の名前です。 で利用できる数字、演算子、関数については、Math の [Expression] で利用できる表現について を参照してください。

華氏 (°F) のグラフが追加されます。
Query「A」の をクリックします。

摂氏 (°C) のグラフが非表示になり、華氏 (°F) のグラフだけが表示されます。

Math の [Expression] で利用できる表現について
に入力できる数値 (定数)、Query の参照、演算子、関数を紹介します。
Query と Query の演算はタイムスタンプを基準に行われます
複数の Query の値を演算する際は、タイムスタンプごとに値が演算されます。
たとえば、Query「A」が 20 秒ごとに 1、Query「B」が 30 秒ごとに 2 になる場合、${A} + ${B} の演算結果は以下のとおりです。
| タイムスタンプ | Query「A」の値 | Query「B」の値 | ${A} + ${B} の演算結果 |
|---|---|---|---|
| 10:00:00 | 1 | 2 | 3 |
| 10:00:10 | |||
| 10:00:20 | 1 | 1 | |
| 10:00:30 | 2 | 2 | |
| 10:00:40 | 1 | 1 | |
| 10:00:50 | |||
| 10:01:00 | 1 | 2 | 3 |
異なるデバイスから送信されたデータを演算して意味がある数値を取得するには、再集計 (Resample) をしてタイムスタンプを揃える方法があります。
たとえば、Query「A」の 20 秒ごとの平均値を「A Mean」として作成し、Query「B」の 20 秒ごとの平均値を「B Mean」として作成した場合、${A Mean} + ${B Mean} の演算結果は以下のとおりです。
| タイムスタンプ | Query「A Mean」の値 | Query「B Mean」の値 | ${A Mean} + ${B Mean} の演算結果 |
|---|---|---|---|
| 10:00:55 | |||
| 10:00:15 | 1 | 2 | 3 |
| 10:00:35 | 1 | 2 | 3 |
| 10:01:55 | 1 | 2 | 3 |
詳しくは、Grafana documentation の Math (英語) を参照してください。
数字 (定数)
数字は、10 進数、8 進数、16 進数、指数、符号などがサポートされています。
| 種類 | 例 |
|---|---|
| 10 進数 |
|
8 進数 (先頭に 0 をつける) | 074: 10 進数の 60 |
16 進数 (先頭に 0x をつける) | 0x6B: 10 進数の 107 |
Query のデータ
Query の名前を指定すると、Query のデータを利用できます。たとえば、Query「Temp query」のデータを利用する場合は、${Temp query} を入力します。
複数のリソースまたは系列を選択した Query を Math に利用する場合
複数のリソースまたは系列を選択した Query のデータは、他の Query のデータと一緒に Math で利用できません。ただし、数字 (定数) や 関数 との演算は利用できます。
たとえば Query A で、リソースタイプ Demo に含まれるリソース Device-1 の temperature と humidity を指定します。この Query A と別の Query B とを使って、$A + $B のような演算はできません。$A + 10 や log($A) は有効です。

演算子
利用できる演算子は、以下のとおりです。
| 演算子の種類 | 説明 | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 算術演算子 | 四則演算 (+、-、*、/) および 剰余 (%)、累乗 (**)、括弧 (()) を利用できます。 | ||||||||||||||||||||||||||||||
| 関係演算子、論理演算子 | いずれも、真の場合に
|
関数
代表的な関数は、以下のとおりです。
| 関数の種類 | 意味 |
|---|---|
abs() | 絶対値 |
log() | 自然対数 (底が e) |
関数について詳しくは、Grafana documentation の Math Functions (英語) を参照してください。
代表値を利用する (Reduce)
既存の Query の Dashboard で表示する時間範囲 または Panel ごとに表示する時間範囲 における代表値を、新しい Query として作成できます。代表値として、以下の項目を利用できます。
| 項目 | 説明 |
|---|---|
| Min | 最小値 |
| Max | 最大値 |
| Mean | 平均値 |
| Sum | 合計値 |
| Count | データ数 |
| Last | 最終値 |
たとえば、定期的に送信される温度データの平均値 (Mean) を、Stat に表示できます。
- 代表値はデータが 1 個のため、Time series や Bar chart など、複数のデータの表示に適した Panel の種類 を選択しているときは、データが表示されません。
- Stat を利用すると折れ線グラフに代表値を重ねて表示できます。なお、Stat を利用する場合は、Expression 機能は利用しません。
以下の 2 つの Panel を作成し、どちらにも「A」という名前の Query を作成します。
どちらの Panel にも Query A に、サンプルデータソース (Demo) の Device-1 の temperature を指定します。

Stat の Query「A」が計算対象の Query です。手順 3 の で選択します。
Stat の Panel のタイトル → の順にクリックして、 をクリックします。

「B」という名前の Expression が作成されます。
以下の項目を設定します。
項目 説明 「Reduce」を選択します。 「Mean」を選択します。 「A」を選択します。「A」は手順 1 で作成した、計算対象の Query です。 計算対象の Query に数値以外のデータが含まれていた場合の計算方法を選択します。
- Stict: 計算結果を NaN (Not a Number) にします。
- Drop Non-numeric Values: 計算できないデータは無視して計算します。
- Replace Non-numeric Values: 計算できないデータは、任意の値に置き換えて計算します。

をクリックします。

平均値が表示されます。
Query「A」の
をクリックします。

「A」の値が非表示になり、平均値だけが表示されます。
をクリックします。

Dashboard に戻ります。

「Reduce」で取得した代表値は「Math」の計算式で利用できます
たとえば、「Reduce」で取得した代表値を「Math」の計算式に含めると、ある系列のデータについて平均との差を算出できます。

再集計する (Resample)
既存の Query を任意の時間間隔 (例: 10 分) で再集計して、新しい Query として作成できます。再集計する方法は、最小値、最大値、平均、合計から選択できます。値が存在しない場合に補うこともできます。たとえば、定期的に送信される温度データに対して、10 分ごとの平均値 (Mean) のグラフを表示できます。
Time series の Panel を作成し、「A」という名前の Query を作成します。
Query A に、サンプルデータソース (Demo) の Device-1 の temperature を指定します。

この「A」が計算対象の Query です。
ここでは、 → で「Red-Yellow-Green (by value)」を選択して、グラフの色を赤系にしています。
をクリックします。

「B」という名前の Expression が作成されます。
以下の項目を設定します。
項目 説明 「Resample」を選択します。 「A」を選択します。「A」は手順 1 で作成した、計算対象の Query です。 再集計する時間間隔 ( 10m) を入力します。単位の文字として、s(秒)、m(分)、h(時間)、d(日) を利用できます。「Mean」を選択します。 で指定した時間間隔にデータが含まれていない場合の値を選択します。
- pad: 直前の値を利用します。
- backfilling: 直後の値を利用します。
- fillna: NaN (Not a Number) にします。

をクリックします。

10 分ごとの平均値のグラフが追加されます。
Query「A」の
をクリックします。

「A」の値が非表示になり、10 分ごとの平均値のグラフだけが表示されます。

真偽値を利用する (Classic condition)
既存の Query の Dashboard で表示する時間範囲 における値から、以下の定義済みの関数を利用して取得した真偽値 (条件を満たす場合に 1 になり、条件を満たさない場合に 0 になる) を、新しい Query として作成できます。
1 行目の では、以下の項目を選択します。
項目 説明 avg() 平均値を計算します。 min() 最小値を計算します。 max() 最大値を計算します。 sum() 合計値を計算します。 count() データの個数を数えます。 last() 最終値を取得します。 median() 中央値を取得します。中央値は、データを並べたときに中央にあるデータです。たとえば、7 個のデータが存在する場合は、4 番目のデータを取得できます。また、8 個のデータが存在する場合は、4 個目のデータと 5 個目のデータの平均値を取得できます。 diff() 最終値 - 最初値を計算します。diff_abs() 最終値 - 最初値の絶対値を計算します。percent_diff() 最初値から最終値までに増減した割合 (%) を計算します。たとえば、最初値が 26.92、最終値が26.51の場合、(26.92 / (26.51 - 26.92)) * 100の値 (-1.55) が評価されます。percent_diff_abs() 最初値から最終値までに増減した割合 (%) の絶対値を計算します。たとえば、最初値が 26.92、最終値が26.51の場合、(26.92 / (26.51 - 26.92)) * 100の絶対値 (1.55) が評価されます。count_non_null() null を除いたデータの個数を数えます。 1 行目の では、Query または Expression を選択します。
2 行目の設定では、 と で選択した内容に従って計算した値が、どのような条件のときに
1にするかを設定します。
たとえば、以下のように設定すると、定期的に送信される温度データの平均値 (Mean) が、20 °C を超えたら 1 を表示できます。

Expression には Classic condition を利用できません
Classic condition の計算対象を選択する では、Query を選択してください。Expression を選択すると、エラーが発生します。
真偽値はデータが 1 個のため、Time series や Bar chart など、複数のデータの表示に適した Panel の種類 を選択しているときは、データが表示されません。
複数の条件を「OR」または「AND」を利用して組み合わせて評価できます
をクリックすると、1 つの Classic Condition に複数の条件を設定できます。その場合は、条件ごとに 1 または 0 を算出したうえで、「OR」または「AND」を利用して組み合わせた結果が Classic Condition の結果になります。ただし、以下の点に注意してください。
- すべての条件で値 (
1または0) を算出できた場合に限り (No Dataにならなかった場合に限り)、「OR」または「AND」を利用して組み合わせた結果も値 (1または0) が算出されます。 - いずれか 1 つの条件が参照している Query/Expression が
No Dataの場合は、Classic Condition の結果もNo Dataになります。 - 各条件が算出した結果 (
1または0) は、個別に確認できません。
Stat の Panel を作成し、「A」という名前の Query を作成します。
Query A に、サンプルデータソース (Demo) の Device-1 の temperature を指定します。

この「A」が計算対象の Query です。次に、Stat の数値を平均値に変更します。
ここでは、 → で「Blue-Purple (by value)」を選択して、グラフの色を青系にしています。
をクリックし、 → で「Mean」を選択します。

Query「A」のグラフと平均値が表示されます。
をクリックします。

「B」という名前の Expression が作成されます。
以下の項目を設定します。
項目 説明 「Classic condition」を選択します。 - で「avg()」を選択します。
- で「A」を選択します。「A」は手順 2 で作成した、計算対象の Query です。
- (より大きい) が表示されていることを確認して「20」を入力します。
[OF] で Expression を選択しないでください
では、計算対象の Query を選択してください。Expression を選択すると、エラーが発生します。


をクリックします。

Query「A」の平均値が「20」より大きい場合は
1が表示されます。それ以外の場合は0が表示されます。

「Classic condition」で取得した真偽値は「Math」の計算式で利用できません。
しきい値を利用する (Threshold)
既存の Query の値が指定した範囲に含まれるかどうかを表す真偽値 (値が指定した値、または範囲に含まれる場合に 1 になり、そうでない場合に 0 になる) を、新しい Query として作成できます。
以下のような Time series を作成できます。この Panel は、緑 (temperature) が 19.5 より大きい値のときは、黄色い円がグラフの上部に表示される仕組みです。しきい値の 19.5 を青い線で表現しています。

| 項目 | 設定 |
|---|---|
| Quick ranges | Last 15 minutes |
| A (Query) | Demo > Device-1 > Standard > temperature |
| B (Expression) |
|
| C (Expsesion) |
|
| Override 1 |
|
| Override 2 |
|