

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Gunakan fungsi temporal dalam ekspresi rumus
<a name="expression-temporal-functions"></a>

Gunakan fungsi temporal untuk mengembalikan nilai berdasarkan stempel waktu titik data.

## Gunakan fungsi temporal dalam metrik
<a name="temporal-functions-in-metrics"></a>

Hanya dalam [metrik](metrics.md), Anda dapat menggunakan fungsi berikut yang mengembalikan nilai berdasarkan stempel waktu titik data.

Argumen fungsi temporal harus berupa properti dari model aset lokal atau ekspresi bersarang. Ini berarti Anda tidak dapat menggunakan properti dari model aset anak dalam fungsi temporal.

Anda dapat menggunakan ekspresi bersarang dalam fungsi temporal. Bila Anda menggunakan ekspresi bersarang, aturan berikut berlaku: 
+ Setiap argumen hanya dapat memiliki satu variabel.

  Misalnya, `latest( t*9/5 + 32 )` didukung.
+ Argumen tidak bisa berupa fungsi agregasi.

  Misalnya, `first( sum(x) )` tidak didukung.


| Fungsi | Deskripsi | 
| --- | --- | 
| `first(x)` | Mengembalikan nilai variabel yang diberikan dengan stempel waktu paling awal selama interval waktu saat ini. | 
| `last(x)` | Mengembalikan nilai variabel yang diberikan dengan timestamp terbaru selama interval waktu saat ini. | 
| `earliest(x)` | Mengembalikan nilai terakhir variabel yang diberikan sebelum dimulainya interval waktu saat ini.<br />Fungsi ini menghitung titik data untuk setiap interval waktu, jika properti input memiliki setidaknya satu titik data dalam sejarahnya. Lihat [time-range-defintion](#time-range-def) untuk detail.  | 
| `latest(x)` | Mengembalikan nilai terakhir variabel yang diberikan dengan stempel waktu terbaru sebelum akhir interval waktu saat ini.<br />Fungsi ini menghitung titik data untuk setiap interval waktu, jika properti input memiliki setidaknya satu titik data dalam sejarahnya. Lihat [time-range-defintion](#time-range-def) untuk detail. | 
| `statetime(x)` | Mengembalikan jumlah waktu dalam detik bahwa variabel yang diberikan positif selama interval waktu saat ini. Anda dapat menggunakan [fungsi perbandingan](expression-comparison-functions.md) untuk membuat properti transform untuk `statetime` fungsi yang akan digunakan. <br />Misalnya, jika Anda memiliki `Idle` properti yang `0` atau`1`, Anda dapat menghitung waktu idle per interval waktu dengan ekspresi ini:`IdleTime = statetime(Idle)`. Untuk informasi selengkapnya, lihat [contoh skenario statetime](#statetime-example).<br />Fungsi ini tidak mendukung properti metrik sebagai variabel input.<br />Fungsi ini menghitung titik data untuk setiap interval waktu, jika properti input memiliki setidaknya satu titik data dalam sejarahnya. | 
| `TimeWeightedAvg(x, [interpolation])` | Mengembalikan rata-rata data masukan yang ditimbang dengan interval waktu antar titik.Lihat [Parameter fungsi berbobot waktu](#timeweighted-parameter) untuk detail komputasi dan interval.<br />Argumen opsional `interpolaton` harus berupa konstanta string:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/expression-temporal-functions.html) | 
| `TimeWeightedStDev(x, [algo])` | Mengembalikan standar deviasi data masukan tertimbang dengan interval waktu antar titik. <br />Lihat [Parameter fungsi berbobot waktu](#timeweighted-parameter) untuk detail komputasi dan interval.<br /> Perhitungan menggunakan algoritma komputasi Last Observated Carry Forward untuk interval antar titik data. Dalam pendekatan ini, titik data dihitung sebagai nilai terakhir yang diamati hingga cap waktu titik data input berikutnya. Berat dihitung sebagai interval waktu dalam hitungan detik antara titik data atau batas jendela. <br />Argumen opsional `algo` harus berupa konstanta string:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/expression-temporal-functions.html)<br />Rumus berikut digunakan untuk perhitungan di mana:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/expression-temporal-functions.html)<br />Persamaan untuk standar deviasi populasi:![Persamaan untuk standar deviasi populasi.](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/images/timeweightedstdev1.png)<br />Persamaan untuk standar deviasi frekuensi:![Persamaan untuk standar deviasi frekuensi.](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/images/timeweighted-frequency-stdev.png) | 

Diagram berikut menunjukkan bagaimana AWS IoT SiteWise menghitung fungsi temporal`first`,,`last`, dan `earliest``latest`, relatif terhadap interval waktu saat ini.

![AWS IoT SiteWise fungsi temporal mengembalikan titik data berdasarkan stempel waktunya.](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/images/sitewise-temporal-functions.png)
<a name="time-range-def"></a>

**catatan**  
Rentang waktu untuk`first(x)`, `last(x)` adalah (mulai jendela saat ini, akhir jendela saat ini].
Rentang waktu untuk `latest(x)` adalah (awal waktu, akhir jendela saat ini].
Rentang waktu untuk `earliest(x)` adalah (awal waktu, akhir jendela sebelumnya].

**Parameter fungsi berbobot waktu**

Fungsi berbobot waktu yang dihitung untuk jendela agregat memperhitungkan hal-hal berikut:
+ Titik data di dalam jendela
+ Interval waktu antara titik data
+ Titik data terakhir sebelum jendela
+ Titik data pertama setelah jendela (untuk beberapa algoritma)

**Ketentuan:**
+ **Titik data buruk — Setiap titik** data dengan kualitas yang tidak baik atau nilai non-angka. Ini tidak dipertimbangkan dalam perhitungan hasil jendela.
+ **Interval buruk** — Interval setelah titik data yang buruk. Interval sebelum titik data pertama yang diketahui juga dianggap sebagai interval yang buruk.
+ **Titik data yang baik** — Setiap titik data dengan kualitas dan nilai numerik yang baik.

**catatan**  
AWS IoT SiteWise hanya mengkonsumsi data `GOOD` berkualitas saat menghitung transformasi dan metrik. Ini mengabaikan `UNCERTAIN` dan titik `BAD` data.
Interval sebelum titik data pertama yang diketahui dianggap sebagai **interval yang buruk**. Untuk informasi selengkapnya, lihat [Tutorial ekspresi formula](expression-tutorials.md).

Interval setelah titik data terakhir yang diketahui berlanjut tanpa batas, mempengaruhi semua jendela berikut. Ketika titik data baru tiba, fungsi menghitung ulang interval.

Mengikuti aturan di atas, hasil jendela agregat dihitung dan terbatas pada batas jendela. Secara default, fungsi hanya mengirimkan hasil jendela jika seluruh jendela adalah **interval yang baik**.

Jika **interval jendela yang baik** lebih kecil dari panjang jendela, fungsi tidak mengirim jendela. 

Ketika titik data yang mempengaruhi hasil jendela berubah, fungsi menghitung ulang jendela, bahkan jika titik data berada di luar jendela. 

Jika properti input memiliki setidaknya satu titik data dalam histori dan perhitungan telah dimulai, fungsi menghitung fungsi agregat berbobot waktu untuk setiap interval waktu.

**Example Contoh skenario statetime**  
Pertimbangkan contoh di mana Anda memiliki aset dengan properti berikut:  
+ `Idle`— Pengukuran yang `0` atau`1`. Ketika nilainya`1`, mesin menganggur.
+ `Idle Time`— Metrik yang menggunakan rumus `statetime(Idle)` untuk menghitung jumlah waktu dalam detik di mana mesin dalam keadaan idle, per interval 1 menit.
`Idle`Properti ini memiliki titik data berikut.  


|  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |
| Stempel waktu | 14:00:00 | 14:00:30 | 14:01:15 SORE | 14:02:45 SORE | 14:04:00 SORE | 
| Idle | 0 | 1 | 1 | 0 | 0 | 
AWS IoT SiteWise menghitung `Idle Time` properti setiap menit dari nilai. `Idle` Setelah perhitungan ini selesai, `Idle Time` properti memiliki titik data berikut.  


|  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |
| Stempel waktu | 14:00:00 | 14:01:00PM | 14:02:00PM | 14:03:00 SORE | 14:04:00 SORE | 
| Idle Time | N/A | 30 | 60 | 45 | 0 | 
AWS IoT SiteWise melakukan perhitungan berikut untuk `Idle Time` pada akhir setiap menit.  
+ Pukul 14:00 (untuk 13:59 hingga 14:00)
  + Tidak ada data `Idle` sebelum pukul 14:00, jadi tidak ada titik data yang dihitung.
+ Pukul 14:01 (untuk 2:00 PM hingga 14:01 PM)
  + Pada pukul 14:00:00, mesin aktif (`Idle`sedang`0`).
  + Pada 14:00:30, mesin dalam keadaan idle (`Idle`is). `1`
  + `Idle`tidak berubah lagi sebelum akhir interval pada 2:01:00 PM, begitu `Idle Time` juga 30 detik.
+ Pukul 14:02 (untuk 14:01 PM hingga 14:02 PM)
  + Pada pukul 14:01:00, mesin dalam keadaan idle (per titik data terakhir pada pukul 14:00:30).
  + Pukul 14:01:15, mesin masih menganggur.
  + `Idle`tidak berubah lagi sebelum akhir interval pada 2:02:00 PM, begitu `Idle Time` juga 60 detik.
+ Pukul 14:03 (untuk 14:02 PM hingga 14:03 PM)
  + Pada pukul 14:02:00, mesin dalam keadaan idle (per titik data terakhir pada 2:01:15 PM).
  + Pada pukul 14:02:45, mesin aktif.
  + `Idle`tidak berubah lagi sebelum akhir interval pada 2:03:00 PM, begitu `Idle Time` juga 45 detik.
+ Pukul 14:04 (untuk 14:03 PM hingga 14:04 PM)
  + Pada 2:03:00 PM, mesin aktif (per titik data terakhir pada 2:02:45 PM).
  + `Idle`tidak berubah lagi sebelum akhir interval pada 2:04:00 PM, begitu `Idle Time` juga 0 detik.

**Example Contoh TimeWeightedAvg dan TimeWeightedStDev skenario**  
Tabel berikut menyediakan contoh input dan output untuk metrik jendela satu menit ini:. `Avg(x), TimeWeightedAvg(x), TimeWeightedAvg(x, "linear"), stDev(x), timeWeightedStDev(x), timeWeightedStDev(x, 'p')`  
Masukan sampel untuk jendela agregat satu menit:  
Semua titik data ini memiliki `GOOD` kualitas.


|  |  | 
| --- |--- |
| 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 | 
Output hasil agregat:  
Tidak ada - Hasil tidak diproduksi untuk jendela ini.


| Waktu | `Avg(x)` | `TimeWeightedAvg(x)` | `TimeWeightedAvg(X, "linear")` | `stDev(X)` | `timeWeightedStDev(x)` | `timeWeightedStDev(x, 'p')` | 
| --- | --- | --- | --- | --- | --- | --- | 
| 3:00:00 | 4 | Tidak ada | Tidak ada | 0 | Tidak ada | Tidak ada | 
| 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 | Tidak ada | 0 | 0 | Tidak ada | 0 | 0 | 

## Gunakan fungsi temporal dalam transformasi
<a name="temporal-functions-in-transforms"></a>

Dalam [transformasi](transforms.md) saja, Anda dapat menggunakan `pretrigger()` fungsi untuk mengambil nilai `GOOD` kualitas untuk variabel sebelum pembaruan properti yang memulai perhitungan transformasi saat ini.

Pertimbangkan contoh di mana produsen menggunakan AWS IoT SiteWise untuk memantau status mesin. Pabrikan menggunakan pengukuran dan transformasi berikut untuk mewakili proses:
+ Pengukuran,`current_state`, yang bisa 0 atau 1.
  + Jika mesin dalam keadaan pembersihan, `current_state` sama dengan 1.
  + Jika mesin dalam keadaan manufaktur, `current_state` sama dengan 0.
+ Sebuah transformasi,`cleaning_state_duration`, itu sama. `if(pretrigger(current_state) == 1, timestamp(current_state) - timestamp(pretrigger(current_state)), none)` Transformasi ini mengembalikan berapa lama mesin berada dalam keadaan pembersihan dalam hitungan detik, dalam format epoch Unix. Untuk informasi selengkapnya, lihat [Gunakan fungsi kondisional dalam ekspresi rumus](expression-conditional-functions.md) dan fungsi [timestamp ()](expression-date-and-time-functions.md).

Jika mesin tetap dalam kondisi pembersihan lebih lama dari yang diharapkan, pabrikan mungkin menyelidiki mesin.

Anda juga dapat menggunakan `pretrigger()` fungsi dalam transformasi multivariat. Misalnya, Anda memiliki dua pengukuran bernama `x` dan`y`, dan transformasi,`z`, yang sama. `x + y + pretrigger(y)` Tabel berikut menunjukkan nilai untuk`x`,`y`, dan `z` dari 9:00 AM sampai 9:15 AM.

**catatan**  
Contoh ini mengasumsikan bahwa nilai untuk pengukuran tiba secara kronologis. Misalnya, nilai `x` untuk 09:00 AM tiba sebelum nilai `x` untuk 09:05 AM.
Jika titik data untuk 9:05 tiba sebelum titik data untuk 9:00 AM, `z` tidak dihitung pada 9:05 AM.
Jika nilai `x` untuk 9:05 tiba sebelum nilai `x` untuk 09:00 AM dan nilai `y` tiba secara kronologis, `z` sama `22 = 20 + 1 + 1` dengan pukul 9:05 pagi.


|  | 09:00AM | 09:05AM | 09:10AM | 09:15AM | 
| --- | --- | --- | --- | --- | 
| `x` | 10 | 20 |  | 30 | 
| `y` | 1 | 2 | 3 |  | 
| `z = x + y + pretrigger(y)` | `y`tidak menerima titik data apa pun sebelum pukul 09:00. Oleh karena itu, `z` tidak dihitung pada pukul 09:00. | 23 = 20 \+ 2 \+ 1<br />`pretrigger(y)`sama dengan 1. | 25 = 20 \+ 3 \+ 2<br />`x`tidak menerima titik data baru. `pretrigger(y)`sama dengan 2. | 36 = 30 \+ 3 \+ 3<br />`y`tidak menerima titik data baru. Oleh karena itu, `pretrigger(y)` sama dengan 3 pada 09:15 AM. | 