時系列をプロットする
ダッシュボードを作成し、プロットする時系列を選択します。カスタムクエリや、フィルタリング、集計、粒度、算術演算、関数などの高度な機能を使用して、時系列を操作します。
ダッシュボードを作成する
Cognite Data Fusion(CDF)の時系列データでダッシュボードを作成するには、以下の手順に従います。
-
Grafanaインスタンスにサインインし、ダッシュボードを作成します。 -
メイン チャート領域の下にあるタブを使用して、ダッシュボードの時系列を選択します。
-
時系列検索 - 特定の時系列からデータを取得します。時系列の名前または説明の入力を開始し、ドロップダウンリストから選択します。
集計と粒度をクエリで直接指定します。デフォルトでは、集計は_平均_に設定され、粒度はチャートの選択された時間間隔によって決定されます。
ヒントオプションで、カスタム ラベルを設定し、時系列からデータを引き出すために
{{property}}
という書式を使用します。たとえば、{{name}} - {{description}}
や{{metadata.key1}}
のように、ラベルを定義するために利用可能なすべての時系列プロパティを使用できます。 -
アセットからの時系列 - 特定のアセットに関連する時系列からデータを取得します。アセットの名前または説明の入力を開始し、ドロップダウン リストから選択します。オプションとして、サブアセットからの時系列を含めるかどうかを決定します。
-
時系列カスタム クエリ - クエリに一致する時系列を取得します。
-
-
選択と一致する時系列がチャート領域に表示されます。必要に応じて時間枠を調整し、関連するデータを表示します。
カスタム クエリを使用する
カスタム クエリでは、時系列データの選択を細かく制御できます。合成時系列を取得するために、算術演算、関数、特別な構文を使用することができます。このセクションでは、データ フィルタリングに関する制限と、正規表現とサーバー側のフィルターの効果的な使用方法についても概説します。
クエリを定義する
時系列をリクエストするには、パラメータを含むクエリを指定します。たとえば、id
が 123
に等しい時系列を照会するには、ts{id=123}
を指定します。
id
、externalId
、または時系列フィルターを使用して時系列をリクエストできます。
合成時系列では、いくつかのプロパティタイプを指定できます。
bool
:ts{isString=true}
またはts{isStep=false}
string
またはnumber
:ts{id=123}
またはts{externalId='external_123'}
array
:ts{assetIds=[123, 456]}
object
:ts{metadata={key1="value1", key2="value2"}}
複雑な合成時系列を作成するには、1 つのクエリでタイプを組み合わせることができます。
ts{name="test", assetSubtreeIds=[{id=123}, {externalId="external_123"}]}
フィルタリング
クエリは、論理 AND
として適用される時系列プロパティに基づくフィルタリングもサポートしています。たとえば、以下のクエリは時系列を検出します。
id
が123
に等しいアセットに属するものname
が"Begin"
で始まるname
が"end"
で終わっていないname
が"Begin query"
と等しくない
ts{assetIds=[123], name=~"Begin.*", name!~".*end", name!="Begin query"}
クエリ構文には、異なる種類の等価演算子が含まれています。
=
- 厳格な等式。CDFへの時系列リクエストのパラメータを指定します。フィルタリング属性と併用します。=!
- 厳格な不等式。取得した時系列を、文字列と等しくないプロパティでフィルタリングします。文字列、数値、ブール値をサポートします。=~
– 正規表現の等式。取得した時系列を、正規表現に一致するプロパティでフィルタリングします。文字列値をサポートします。!~
- 正規表現の不等式。取得した時系列を、正規表現に一致しないプロパティでフィルタリングします。文字列値をサポートします。
メタデータでフィルタリングすることも可能です。
ts{externalIdPrefix="test", metadata={key1="value1", key2=~"value2.*"}}
上記のクエリは、時系列をリクエストします。上記で:
externalIdPrefix
は"test"
に等しいmetadata.key1
は"value1"
に等しいmetadata.key2
は"value2"
で始まる
クエリの制限
カスタム クエリを実行する場合、時系列を取得するための基本的な制限を理解することが重要です。
-
クライアント側のフィルタリング:コネクタは、_クライアント側_で正規表現クエリ(
=~
は一致、!~
は除外)と不正確な不等式フィルター(=!
)を適用します。このプロセスは、Cognite Data Fusion(CDF)から最大 1000 の時系列アイテムを最初に取得した後に行われます。このアプローチにより、総数が 1000 を超える場合、関連する時系列の一部が取得されたサブセットに含まれない可能性があります。 -
サーバー側のフィルタリング:この制限を緩和するために、可能な限り_サーバー側_のフィルタリングを使用することを推奨します。これは、特定の時系列フィルター特性に厳格な等式フィルター(
=
)を適用することで実現できます。こうすることで、CDF から取得される時系列を効果的に絞り込み、後続のクライアント側のフィルターがより的を絞ったデータセットに適用されるようになります。これは、関連するすべての時系列、特に注目する時系列が、CDF から取得した最初のデータセットに確実に含まれるようにするのに特に有用です。
_正規表現_などの_クライアント側_フィルターを適用する前に、_サーバー側_フィルタリングと特定の属性やメタデータを組み合わせて、クエリのスコープを絞り込みます。このアプローチにより、Grafana ダッシュボードで注目するすべての時系列を選択できる可能性が大幅に高まります。
集計、粒度、整列
ユーザーインターフェイスのドロップダウンを使用して、各時系列の集計と粒度を指定できます。
たとえば、集計を average
に設定し、粒度を 1h
に設定した場合、すべてのクエリは選択された集計と粒度でデータポイントをリクエストします。デフォルトでは、合成時系列での集計は 1970 年 1 月 1 日(木)00:00:00(UTC)に揃えられています。
合成時系列クエリ構文では、集計、粒度、整列を時系列ごとに個別に定義することができます。
ts{externalId='houston.ro.REMOTE_AI[34]', alignment=1599609600000, aggregate='average', granularity='24h'}
上記のクエリは、ユーザーインターフェイスで設定された集計と粒度の値を上書きします。サポートされている集計のリストについては、API ドキュメントを参照してください。
算術演算
算術演算を適用して時系列を組み合わせることができます。例:
ts{id=123} + ts{externalId="test"}
上記のクエリの結果は、データポイントが各時系列の合計値である単一のプロットです。
この例では、クエリ ts{name~="test1.*"}
は複数の時系列を返すことができますが、ここでは ID が 111
、222
、333
の 3 つの時系列を返すと仮定します。
ts{name~="test1.*"} + ts{id=123}
クエリの結果は、クエリの 1 番目と 2 番目の式によって返された時系列値の合計の組み合わせである 3 つのプロットです。結果のプロットはこれらのクエリを表しています。
ts{id=111} + ts{id=123}
ts{id=222} + ts{id=123}
ts{id=333} + ts{id=123}
この動作の例(各 ts{}
式は 2 つの時系列を返す)を下の画像で見ることができます(チャートの下のラベルに注目)。
Functions
合成時系列に適用できる幅広い関数をサポートしています。
- 三角関数:
sin(ts{})
、cos(ts{})
、pi()
。 - 可変長関数:
max(ts{}, ...)
、min(ts{}, ...)
、avg(ts{}, ...)
。 - 代数:
ln(ts{})
、pow(ts{}, exponent)
、sqrt(ts{})
、exp(ts{})
、abs(ts{})
。 - エラー処理:
on_error(ts{}, default_value)
。計算のエラー処理を参照してください。 - 文字列時系列:
map(expression, [list of strings to map from], [list of values to map to], default_value)
。文字列時系列を参照してください。
計算のエラー処理
on_error(ts{...})
関数は、何らかの例外が発生してもチャートのレンダリングを可能にします。以下のようなエラーを処理します。
BAD_DOMAIN
- 不適切な入力範囲を指定した場合。たとえば、ゼロによる除算や負の数の平方根など。OVERFLOW
- 結果が絶対値で 10^100 を超える場合。
これらのいずれかに遭遇した場合、CDF はタイムスタンプの値を返す代わりに、エラー メッセージを含むエラーフィールドを返します。これらを避けるには、(サブ)式を on_error()
関数でラップします。
on_error(1/ts{externalId='canBeZero'}, 0)
文字列時系列
関数 map()
は、文字列を持つ時系列を処理して文字列を倍数に変換できます。たとえば、バルブの時系列が "OPEN"
または "CLOSED"
の値を持つ場合、次のようにして数値に変換できます。
map(TS{externalId='stringstate'}, ['OPEN', 'CLOSED'], [1, 0], -1)
"OPEN"
は 1、"CLOSED"
は 0、それ以外は -1 にマッピングされます。
文字列時系列の集計は現在サポートされていません。文字列時系列はすべてステップ時系列と見なされます。
単位変換
時系列に定義された unitExternalId
がある場合、カスタム クエリを使用してデータに対するクエリを実行する際に、同じ数量で値を異なる単位に変換できます。
例:
{ts{externalId='temperature_f_houston', targetUnit='temperature:deg_c'} + ts{id='123', targetUnitSystem='SI'}}
時系列または集計ごとに、targetUnit
または targetUnitSystem
を選択できます。選択するターゲット単位は、元の単位と互換性がなければなりません。
合成時系列を使用してデータ ポイントのクエリを実行する場合、値の単位は保持されません。つまり、物理的に正確でなくても、温度時系列から距離時系列に値を加えることは可能です。
ラベル フィールドの各時系列の unit
または unitExternalId
プロパティにアクセスしようとすると、Grafana はデータ ポイントの単位ではなく、時系列の元の単位を返すことに注意してください。
データ モデル インスタンスから時系列データを表示する
CDF データ モデルのインスタンスから時系列データを表示できます。
-
データモデルタブで、データモデルとバージョンを選択します。
-
クエリを指定します。
重要時系列を含むフィールドの下に
__typename
とexternalId
を追加します。この例では、temperature
とpressure
の下にあるのは次のとおりです。{
listPump {
items {
temperature {
__typename
externalId
}
pressure {
__typename
externalId
}
}
}
}