

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

# 数式で時間関数を使用する
<a name="expression-temporal-functions"></a>

時間関数を使用して、データポイントのタイムスタンプに基づいた値を返すことができます。

## メトリクスで時間関数を使用する。
<a name="temporal-functions-in-metrics"></a>

[[metrics]](metrics.md) (メトリクス) のみ、データポイントのタイムスタンプに基づいた値を返す次の関数を使用できます。

時間関数の引数は、ローカルのアセットモデルまたは入れ子式のプロパティである必要があります。これは、子アセットモデルのプロパティを一時関数で使用できないことを意味します。

一時関数で入れ子になった式を使用することができます。入れ子になった式を使用する場合、次のルールが適用されます。
+ 各引数は1つの変数しか持つことができません。

  例えば、`latest( t*9/5 + 32 )` がサポートされています。
+ 引数には集計関数を指定できません。

  例えば、`first( sum(x) )` はサポートされていません。


| 関数 | 説明 | 
| --- | --- | 
| `first(x)` | 現在の時間間隔における最も早いタイムスタンプを持つ、指定された変数値を返します。 | 
| `last(x)` | 現在の時間間隔における最新のタイムスタンプを持つ、指定された変数値を返します。 | 
| `earliest(x)` | 現在の時間間隔が開始する前の指定された変数の最新の値を返します。<br />入力プロパティの履歴に少なくとも 1 つのデータポイントがある場合、この関数は、時間間隔ごとにデータポイントを計算します。詳細については、「[time-range-defintion](#time-range-def)」を参照してください。 | 
| `latest(x)` | 現在の時間間隔が終了する前の最新のタイムスタンプを持つ、指定された変数の最新の値を返します。<br />入力プロパティの履歴に少なくとも 1 つのデータポイントがある場合、この関数は、時間間隔ごとにデータポイントを計算します。詳細については、「[time-range-defintion](#time-range-def)」を参照してください。 | 
| `statetime(x)` | 指定された時間間隔において、指定された変数が正である時間 (秒単位) を返します。[[comparison functions]](expression-comparison-functions.md) (比較関数) を使用して、`statetime` 関数が消費する変換プロパティを作成することができます。<br />たとえば、`Idle` プロパティが `0` または `1` の場合、次の式 `IdleTime = statetime(Idle)` を使用して時間間隔ごとのアイドル時間を計算できます。詳細については、「[statetime シナリオの例](#statetime-example)」を参照してください。<br />この関数は、入力変数としてメトリクスプロパティをサポートしていません。<br />入力プロパティの履歴に少なくとも 1 つのデータポイントがある場合、この関数は、時間間隔ごとにデータポイントを計算します。 | 
| `TimeWeightedAvg(x, [interpolation])` | ポイント間の時間間隔で重み付けされた入力データの平均を返します。計算と間隔の詳細については、「[時間加重関数のパラメータ](#timeweighted-parameter)」を参照してください。<br />オプションの引数 `interpolaton` は文字列定数である必要があります。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/expression-temporal-functions.html) | 
| `TimeWeightedStDev(x, [algo])` | ポイント間の時間間隔で重み付けされた入力データの標準偏差を返します。<br />計算と間隔の詳細については、「[時間加重関数のパラメータ](#timeweighted-parameter)」を参照してください。<br /> この計算では、データポイント間の間隔に Last Observed Carry Forward (LOCF) 計算アルゴリズムが使用されます。このアプローチでは、データポイントは次の入力データポイントのタイムスタンプまで最後の観測値として使用されます。重みは、データポイント間またはウィンドウ境界間の時間間隔 (秒単位) の形式で求められます。<br />オプションの引数 `algo` は文字列定数である必要があります。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/expression-temporal-functions.html)<br />計算には以下の式が使用されます。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/expression-temporal-functions.html)<br />母集団の標準偏差の計算式:![母集団の標準偏差の計算式。](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/images/timeweightedstdev1.png)<br />頻度の標準偏差の計算式:![頻度の標準偏差の計算式。](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/images/timeweighted-frequency-stdev.png) | 

次の図は`first`、 が現在の時間間隔に対して時間関数 、`latest`、、`last``earliest`および AWS IoT SiteWise を計算する方法を示しています。

![AWS IoT SiteWise 時間関数は、タイムスタンプに基づいてデータポイントを返します。](http://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/images/sitewise-temporal-functions.png)
<a name="time-range-def"></a>

**注記**  
`first(x)` の時間範囲 `last(x)` は (現在のウィンドウの開始、現在のウィンドウの終了] です。
`latest(x)` の時間範囲は (時間の開始、現在のウィンドウの終了] です。
`earliest(x)` の時間範囲は (時間の開始、前のウィンドウの終了] です。

** 時間加重関数のパラメータ**

集計ウィンドウ用に計算される時間加重関数では、次のことが考慮されます。
+ ウィンドウ内のデータポイント数
+ データポイント間の時間間隔数
+ ウィンドウの前の最後のデータポイント
+ ウィンドウの後の最初のデータポイント (一部のアルゴリズムのみ)

**条件:**
+ **不良データポイント** – 品質が良くないか、値が数値以外のデータポイント。不良データポイントは、ウィンドウの結果計算では考慮されません。
+ **不良間隔** – 不良データポイントの後の間隔。最初の既知のデータポイントの前の間隔も不良間隔とみなされます。
+ **良好データポイント** – 品質が良好でかつ値が数値のデータポイント。

**注記**  
AWS IoT SiteWise は、変換とメトリクスを計算するときにのみ`GOOD`品質データを消費します。`UNCERTAIN` および `BAD` データポイントは無視します。
最初の既知のデータポイントの前の間隔も**不良間隔**とみなされます。詳細については「[数式表現チュートリアル](expression-tutorials.md)」を参照してください。

最後の既知のデータポイントの後の間隔は無限に続き、以降のすべてのウィンドウに影響します。新しいデータポイントがくると、この関数は間隔を再計算します。

上記のルールに従って、集計ウィンドウの結果が計算され、ウィンドウの境界が制限されます。デフォルトでは、この関数はウィンドウ全体が**良好間隔**である場合にのみウィンドウの結果を送信します。

ウィンドウの**良好間隔**がウィンドウの長さよりも短い場合、この関数はウィンドウを送信しません。

ウィンドウの結果に影響するデータポイントに変更があると、データポイントがウィンドウの外側にあっても、ウィンドウは再計算されます。

入力プロパティの履歴に少なくとも 1 つのデータポイントがあり、計算が開始されていた場合は、時間間隔ごとに時間加重集計関数が計算されます。

**Example statetime シナリオの例**  
次のプロパティを持つアセットがある例を考えてみましょう。  
+ `Idle` - `0` または `1` である測定値をいう。値が `1` の場合、マシンはアイドル状態です。
+ `Idle Time` - 1分間隔で、機械がアイドル状態である時間を秒単位でコンピューティングする式 `statetime(Idle)` を使用した指標。
`Idle` プロパティには、以下のデータポイントがあります。  


|  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |
| タイムスタンプ | 2:00:00 PM | 2:00:30 PM | 2:01:15 PM | 2:02:45 PM | 2:04:00 PM | 
| Idle | 0 | 1 | 1 | 0 | 0 | 
AWS IoT SiteWise は、 の値から `Idle Time`プロパティを 1 分ごとに計算します`Idle`。この計算が完了すると、`Idle Time` プロパティには次のデータポイントが存在します。  


|  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |
| タイムスタンプ | 2:00:00 PM | 2:01:00 PM | 2:02:00 PM | 2:03:00 PM | 2:04:00 PM | 
| Idle Time | 該当なし | 30 | 60 | 45 | 0 | 
AWS IoT SiteWise は、毎分`Idle Time`の終わりに に対して次の計算を実行します。  
+ 2:00 PM 時点 (1:59 PM から 2:00 PM の場合) 
  + `Idle` には 2:00 PM より前のデータがないため、データポイントは計算されません。
+ 2:01 PM 時点 (2:00 PM から 2:01 PM の場合) 
  + 2:00:00 PM の時点で、マシンはアクティブです (`Idle` は `0`)。
  + 2:00:30 PM の時点で、マシンはアイドル状態です (`Idle` は `1`)。
  + 2:01:00 PM にインターバルが終了する前に `Idle` は再度変更されないため、`Idle Time` は 30 秒になります。
+ 2:02 PM 時点 (2:01 PM から 2:02 PM の場合) 
  + 2:01:00 PM の時点で、マシンはアイドル状態です (2:00:30 PM 時点の直前のデータポイントによる)。
  + 2:01:15 PM の時点で、マシンはまだアイドル状態です。
  + 2:02:00 PM にインターバルが終了する前に `Idle` は再度変更されないため、`Idle Time` は 60 秒になります。
+ 2:03 PM 時点 (2:02 PM から 2:03 PM の場合) 
  + 2:02:00 PM の時点で、マシンはアイドル状態です (2:01:15 PM 時点の直前のデータポイントによる)。
  + 2:02:45 PM の時点で、マシンはアクティブです。
  + 2:03:00 PM にインターバルが終了する前に `Idle` は再度変更されないため、`Idle Time` は 45 秒になります。
+ 2:04 PM 時点 (2:03 PM から 2:04 PM の場合) 
  + 2:03:00 PM の時点で、マシンはアクティブです (2:02:45 PM 時点の直前のデータポイントによる)。
  + 2:04:00 PM にインターバルが終了する前に `Idle` は再度変更されないため、`Idle Time` は 0 秒になります。

**Example TimeWeightedAvg シナリオと TimeWeightedStDev シナリオの例**  
次の表は、1 分間のウィンドウメトリクスの入力例と出力例を示しています: `Avg(x), TimeWeightedAvg(x), TimeWeightedAvg(x, "linear"), stDev(x), timeWeightedStDev(x), timeWeightedStDev(x, 'p')`。  
1 分間の集計ウィンドウの入力例:  
これらのデータポイントはすべて、`GOOD` の品質を持ちます。


|  |  | 
| --- |--- |
| 03:00:00 | 4.0 | 
| 03:01:00 | 2.0 | 
| 03:01:10 | 8.0 | 
| 03:01:50 | 20.0 | 
| 03:02:00 | 14.0 | 
| 03:02:05 | 10.0 | 
| 03:02:10 | 3.0 | 
| 03:02:30 | 20.0 | 
| 03:03:30 | 0.0 | 
集計結果の出力:  
なし – このウィンドウでは結果は生成されません。


| Time | `Avg(x)` | `TimeWeightedAvg(x)` | `TimeWeightedAvg(X, "linear")` | `stDev(X)` | `timeWeightedStDev(x)` | `timeWeightedStDev(x, 'p')` | 
| --- | --- | --- | --- | --- | --- | --- | 
| 3:00:00 | 4 | なし | なし | 0 | なし | なし | 
| 3:01:00 | 2 | 4 | 3 | 0 | 0 | 0 | 
| 3:02:00 | 14 | 9 | 13 | 6 | 5.430610041581775 | 5.385164807134504 | 
| 3:03:00 | 11 | 13 | 12.875 | 8.54400374531753 | 7.724054437220943 | 7.659416862050705 | 
| 3:04:00 | 0 | 10 | 2.5 | 0 | 10.084389681792215 | 10 | 
| 3:05:00 | なし | 0 | 0 | なし | 0 | 0 | 

## 変換で時間関数を使用する
<a name="temporal-functions-in-transforms"></a>

[[変換](transforms.md)] のみ、`pretrigger()` 関数を使用して、現在の変換の計算を開始させたプロパティ更新前の変数の `GOOD` 品質値を取得することができます。

メーカーが AWS IoT SiteWise を使用してマシンのステータスをモニタリングする例を考えてみましょう。メーカーは、次のような測定値と変換を使用してプロセスを表現しています。
+ 測定値 `current_state` は 0 または 1 となります。
  + 本機がクリーニング状態の場合、`current_state` は 1 になる。
  + 機械が製造状態にある場合、`current_state` は 0 になる。
+ `cleaning_state_duration`に相当する変換、`if(pretrigger(current_state) == 1, timestamp(current_state) - timestamp(pretrigger(current_state)), none)`。この変換は、マシンがクリーニング状態である時間を秒単位で Unix エポックフォーマットで返します。詳しくは、[数式で条件関数を使用する](expression-conditional-functions.md) および[timestamp () ](expression-date-and-time-functions.md)(タイムスタンプ) 関数を参照してください。

クリーニング状態が予想以上に長く続くようであれば、メーカーが調査する場合もあるります。

また、多変量変換で `pretrigger()` 関数を使うこともできます。例えば、`x`、`y` という 2 つの測定値があり、`z` と等しい変換値 `x + y + pretrigger(y)` があるとします。次の表は、午前 9 時から午前 9 時 15 分までの `x`、`y`、`z` の値である。

**注記**  
この例では、測定値の値が時系列に到着することを想定しています。例えば、午前 09 時 00 分の`x` の値は、午前 09 時 05 分の `x` の値より先に到着する。
午前 9 時 5 分のデータポイントが午前 9 時のデータポイントより先に到着した場合、午前 9 時 5 分には `z` はコンピューティングされません。
午前 9 時 5 分 の `x` の値が午前 9 時の `x` の値より先に到着し、`y` の値が時系列に到着する場合、`z` は午前 9 時 5 分の `22 = 20 + 1 + 1` と等しくなる。


|  | 午前 9 時 0 分 | 午前 9 時 5 分 | 午前 9 時 10 分 | 午前 9 時 15 分 | 
| --- | --- | --- | --- | --- | 
| `x` | 10 | 20 |  | 30 | 
| `y` | 1 | 2 | 3 |  | 
| `z = x + y + pretrigger(y)` | `y` は午前 09:00 以前にデータポイントを受信していません。したがって、`z` は午前 09:00 にはコンピューティングされません。 | 23 = 20 \+ 2 \+ 1<br />`pretrigger(y)` は 1 に等しい。 | 25 = 20 \+ 3 \+ 2<br />`x` は新しいデータポイントを受信しません。`pretrigger(y)` は 2 に等しい。 | 36 = 30 \+ 3 \+ 3<br />`y` は新しいデータポイントを受信しません。したがって、午前 09 時 15 分には `pretrigger(y)` は3に等しい。 | 