Transform 機能は、Query や Expression を Panel で可視化する前に実行される変換機能です。以下のユースケースで利用します。
- しきい値を設定して、しきい値を超えた値をフィルタリングする
- 系列名を変更する
- 複数の Query を外部結合する
Alert rule では、Transform を適用したデータを監視できません。
Harvest Data にデータを保存する前に、Orbit を利用してデータを変換することもできます。
Transformation を追加する
「Edit Panel」画面で表示するデータ (Query や Expression) を選択します。
をクリックして、追加する Transformation を選択します。
2 つ目以降の Transformation を追加する場合は、
をクリックして、追加する Tranformation を選択します。ここでは、代表的な Transformation を紹介します。詳しくは、Grafana documentation の Transform data (英語) を参照してください。
Transformation 説明 Add field from calculation を選択して、各項目を設定します。
Binary operation: 四則演算 (
+
、-
、*
(かけ算)、/
(割り算)) を行った結果を新しい Query として表示します。四則演算の対象は、Panel に設定した Query や、任意の値を設定できます。Reduce row: 複数の Query から代表値 (例: 平均) を抽出して新しい Query として表示します。代表値は、 で選択できます。
Mean (平均) を表す Transformation を追加した例:
四則演算を行う場合は、Expression の Math を利用することを推奨します。
Filter by name 特定の系列を非表示にできます。たとえば、Table の elevation だけを非表示にできます。詳しくは、特定の系列を非表示にする (Filter by name) を参照してください。 Filter data by values しきい値を設定して、しきい値を超えた値をフィルタリングします。詳しくは、一部の値をフィルタリングする (Filter data by values) を参照してください。 Join by field 複数の Query を外部結合または内部結合して 1 つの Table にまとめます。詳しくは、複数の Query を外部結合する (Join by field > OUTER) を参照してください。 Organize fields 系列名を変更します。詳しくは、系列をカスタマイズする (Organize fields) を参照してください。 Rename by regex 正規表現に一致した系列名を一括変更します。詳しくは、系列名を一括変更する (Rename by regex) を参照してください。 Sort by デフォルトのデータの並び順を設定できます。詳しくは、デフォルトのデータの並び順を設定する (Sort by) を参照してください。 複数の Transformation を設定した場合は、上から順番に適用されます。
をドラッグすると、Transformation の順番を変更できます。
Transformation を削除する
をクリックすると、Transformation が削除されます。
Transformation の利用例
Transformation には多くの種類がありますが、いくつかについて実際の利用例を交えて紹介します。
特定の系列を非表示にする (Filter by name)
Filter by name を利用すると、特定の系列を非表示にできます。たとえば、Table の elevation だけを非表示にできます。
elavation を非表示にする前:
新しい Panel を追加して、以下の Query を追加します。
- Query A: Demo > Device-1 > Standard > -All-
- Panel の種類: Table
をクリックして、「Filter by name」をクリックします。
に、すべての系列が表示されます。
非表示にする系列をクリックして、チェックを外します。
正規表現を利用する場合は、
の入力欄に、/l/
(名前にl
を含む系列) などを入力します。
Panel の種類によっては必須の系列があります
必須の系列を非表示にすると、データが表示されません。たとえば、Time series では Time を非表示にすると「Data is missing a time field」と表示され、データが表示されなくなります。Time を表示する設定にしてください。たとえば、正規表現を利用する場合は、/^(Time|.*l.*)$/
のように設定すると、Time と、名前に l
を含む系列が Time series で表示されます。
一部の値をフィルタリングする (Filter data by values)
Filter data by values を利用すると、しきい値から外れた値をフィルタリングできます。たとえば、室温を計測している場合に、異常に高い温度が保存されたときに、その値を非表示にできます。
humidity が 70 より大きいデータのみ表示する例:
しきい値から外れた値を含む 'データ' がフィルタリングされます
同じ時間に温度と湿度を保存している場合は、温度に対して Filter data by values を設定してデータがフィルタリングされると、同じ時間の湿度もフィルタリングされます。
新しい Panel を追加して、以下の Query を追加します。
- Query A: Demo > Device-1 > Standard > temperature
- Query B: Demo > Device-1 > Standard > humidity
- Panel の種類: Time series
をクリックして、「Filter data by values」を選択します。
以下の項目を設定します。
項目 説明 フィルタリングの種類を設定します。例: Include。
- Include: 指定した条件を満たすデータを表示します。
- Exclude: 指定した条件を満たすデータを非表示にします。
複数の条件を設定した場合の判定方法を設定します。例: Match all。
- Match all: 設定したすべての条件に該当したデータを表示 / 非表示します。
- Match any: 設定したいずれかの条件に該当したデータを表示 / 非表示します。
をクリックして、以下の項目を設定します。
項目 説明 Filter data by values を適用する Query を選択します。 フィルタリングの判定条件を設定します。
例:
- is greater: に指定した値より大きい場合に、条件を満たすと判定されます。指定した値を含みません。
- is lower: に指定した値より小さい場合に、条件を満たすと判定されます。指定した値を含みません。
- Is between: に指定した 2 つの値の間に含まれる場合に、条件を満たすと判定されます。指定した値を含みません。
[Value] には Harvest Data に保存されているデータに沿った値を入力します
Filter data by value で評価するデータは、Harvest Data に保存されているデータです。一方、Panel に表示される値は、保存されているデータとは異なります。たとえば、小数点第 2 位以下で丸められていたり、UNIX 時間 (ミリ秒) が 2022-10-26 01:23:45 といった表示になっている場合があります。
この場合、
には、Harvest Data に保存されているデータに沿った値 (UNIX 時間 (ミリ秒)) を入力します。意図しない結果になる場合は、
をクリックして、データを確認してください。複数の Query を外部結合する (Join by field > OUTER)
Join by field の「OUTER」を利用すると、複数の Query を外部結合して 1 つの Query にまとめられます。
たとえば、Table では複数の Query のデータをまとめて表示できません。仮に 5 つの Query を設定しても、Table には、選択した 1 つの Query のデータだけが表示されます。
このようなときに Join by field の OUTER (外部結合) を利用すると、複数の Query のデータを 1 つの Table で表示できます。
新しい Panel を追加して、以下の Query を追加します。
- Query A: Demo > Device-1 > Standard > temperature
- Query B: Demo > Device-2 > Standard > temperature
- Query C: Demo > Device-3 > Standard > temperature
- Query D: Demo > Device-4 > Standard > temperature
- Query E: Demo > Device-5 > Standard > temperature
- Panel の種類: Table
をクリックして、「Join by field」をクリックします。
以下の項目を設定します。
項目 説明 「OUTER」(外部結合) を選択します。
「INNER」を選択すると、内部結合が行われます。
結合する際の基準となるフィールドを選択します。
たとえば、日時を示す「Time」を選択すると、同じ日時のデータが同じ行になるように外部結合 / 内部結合されます。
OUTER JOIN (外部結合) する場合は再集計する (Resample) ことも検討してください
日時を示す「Time」を選択する場合、データの日時が完全に一致するデータのみ外部結合されます。あらかじめ任意の時間間隔 (例: 30 秒) で再集計すると時間が一致するため、期待した結果が得られることがあります。再集計について詳しくは、再集計する (Resample) を参照してください。
系列をカスタマイズする (Organize fields)
Organize fields を利用すると、系列名を簡単に変更したり、系列の表示 / 非表示を切り替えたり、系列の表示順序を変更したりできます。
Organize fields は複数の Query には適用できません
Organize fields は、1 つの Query にのみ適用できます。
Panel に、以下の 1 つの Query を追加した場合は、Organize fields を適用できます。
- Demo > Device-1 > Standard > -All-
Panel に 2 つの Query を追加した場合は、
Organize fields only works with a single frame. Consider applying a join transformation first.
と表示され、Organize fields を適用できません。2 つの Query を追加した例:
- Demo > Device-1 > Standard > temperature
- Demo > Device-2 > Standard > temperature
ただしこの場合でも、Organize fields の前に、複数の Query を外部結合する (Join by field > OUTER) を追加すると、Organize fields を適用できます。
系列名を変更する機能について
ほかにも系列名を変更する機能があります。詳しくは、系列の名前を変更する を参照してください。
新しい Panel を追加して、以下の Query を追加します。
- Query A: Demo > Device-1 > Standard > -All-
- Panel の種類: Time series
ここでは、6 つの系列が表示されています。
をクリックして、「Organize fields」をクリックします。
系列の一覧が表示されます。
以下のように設定します。
系列 説明 Time 設定なし。 battery、elevation、latitude、longitude をクリックして、非表示にします。 humidity 「湿度」と入力します。 temperature 「温度」と入力します。 「湿度」と「温度」の 2 つの系列だけが表示されます。
系列名を一括変更する (Rename by regex)
Rename by regex を利用すると、正規表現を使って系列名を一括変更できます。以下のような用途で利用できます。
デバイスから送信されたデータのフィールド名に、IoT SIM の名前やデータの種類を表す文字列が設定されている場合に、それらの文字列を削除できます。
たとえば、系列名が
{IoT SIM 名}.{データの種類}
(例:sample-SIM-1.tempereture
、sample-SIM-1.humidity
) になっている場合に、sample-SIM-1.
を一括削除できます。デバイスから送信されたデータのフィールド名に、IoT SIM の名前やデータの種類を表す文字列が設定されている場合に、データの種類を表す文字列を削除できます。
たとえば、系列名が
{IoT SIM 名}.{データの種類}
(例:sample-SIM-1.temperature
、sample-SIM-2.temperature
) になっている場合に、.temperature
を一括削除できます。
系列名を変更する機能について
ほかにも系列名を変更する機能があります。詳しくは、系列の名前を変更する を参照してください。
ここでは、サンプルデータソース (Demo) の Device-1 ~ Device-5 の temperature だけを Time series に表示します。しかし、系列名がすべて「temperature」になるため、系列名を「Device-1」~「Device-5」に変更します。
新しい Panel を追加して、以下の Query を追加します。
- Query A: Demo > Device-1 > Standard > temperature
- Query B: Demo > Device-2 > Standard > temperature
- Query C: Demo > Device-3 > Standard > temperature
- Query D: Demo > Device-4 > Standard > temperature
- Query E: Demo > Device-5 > Standard > temperature
- Panel の種類: Time series
ここでは、すべての系列名が「temperature」です。
をクリックして、「Join by field」をクリックします。
以下の項目を設定します。
項目 説明 「OUTER」(外部結合) を選択します。
「INNER」を選択すると、内部結合が行われます。
結合する際の基準となるフィールドを選択します。
たとえば、日時を示す「Time」を選択すると、同じ日時のデータが同じ行になるように外部結合 / 内部結合されます。
ここで、系列名に自動的に数字が付与され、「temperature 1」~「temperature 5」に変更されます。
をクリックして、「Rename by regex」をクリックします。
以下の項目を設定します。
項目 説明 正規表現を入力します。 (...)
や(?<name>...)
を利用したキャプチャグループを利用できます。例:temperature (?<no>[1-5])
新しい文字列を入力します。キャプチャグループに一致した文字列は、 $1
や$<name>
などで参照できます。例:Device-$<no>
例のとおりに設定すると、「temperature 1」~「temperature 5」が、「Device-1」~「Device-5」に変更されます。
デフォルトのデータの並び順を設定する (Sort by)
Sort by を利用すると、デフォルトのデータの並び順を設定できます。たとえば、Table でデータを表示すると、データが古い順に表示されるようなときに、Sort by を利用して、データが新しい順に表示されるように設定できます。
グラフの表示とデータの並び順の関係は Panel の種類によって異なります
Panel の種類 によっては、グラフの表示とデータの並び順に関係がないことがあります。たとえば、Time series や Stat は、Sort by を利用できません。
- Time series は、Time の値を利用してグラフを描画しています。Sort by でデータの並び順を設定しても、グラフの形状に影響はありません。
- Stat のグラフは、Time の値とデータの並び順の両方を利用して描画しているため、予期しない形状になります。Sort by を利用しないでください。
Table で表のヘッダーを表示している場合は、ヘッダーをクリックするとデータの並び順を変更できます。
新しい Panel を追加して、以下の Query を追加します。
- Query A: Demo > Device-1 > Standard > -All-
- Panel の種類: Table
ここでは、データが古い順に表示されています。
をクリックして、「Sort by」をクリックします。
以下の項目を設定します。
項目 説明 並び順の基準になる系列を選択します。例:「Time」を選択します。 逆順にする場合は、オンにします。 Time で逆順に表示する例 (最新の情報を上に表示する例):