本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
公式運算式教學
您可以遵循這些自學課程,在中使用公式運算式 AWS IoT SiteWise。
在公式中使用字串
您可以對公式運算式中的字串進行操作。您也可以從參照屬性和測量屬性的變數中輸入字串。
重要
公式運算式只能輸出雙精度值或字串值。巢狀運算式可以輸出其他資料類型 (例如字串),但整體公式必須評估為數字或字串。您可以使用 jp 函數將字串轉換為數字。布林值必須是 1 (真) 或 0 (假)。如需詳細資訊,請參閱未定義、無限和溢出值。
AWS IoT SiteWise 提供下列可用來對字串進行操作的公式運算式功能:
篩選資料點
您可以使用 if 函數篩選出不符合條件的資料點。if
函數會評估條件,並傳回true
和false
結果的不同值。您可以使用 none 常數作為一個if
函數案例的輸出,以捨棄該案例的資料點。
篩選出符合條件的資料點的步驟
-
建立使用
if
函數定義條件的轉換,以檢查條件是否符合,並none
以result_if_true
或result_if_false
值的方式傳回。
範例:過濾掉水未沸騰的資料點
考慮一個場景,你有一個測量temp_c
, 提供溫度 (攝氏) 的水在一台機器. 您可以定義以下轉換,以過濾掉水未沸騰的資料點:
-
轉換:
boiling_temps = if(gte(temp_c, 100), temp_c, none)
— 如果溫度大於或等於 100 攝氏度,則傳回溫度,否則不會傳回任何資料點。
計算符合條件的資料點
您可以使用比較函數和 sum () 來計算條件為真的資料點的數量。
計算符合條件的資料點
-
建立使用比較函數在另一個屬性上定義篩選條件的轉換。
-
建立可加總符合該條件之資料點的指標。
範例:計算水沸騰的資料點數量
考慮一個場景,你有一個測量temp_c
, 提供溫度 (攝氏) 的水在一台機器. 您可以定義下列轉換和指標屬性,以計算水沸騰的資料點數量:
-
轉換:
is_boiling = gte(temp_c, 100)
—1
如果溫度大於或等於攝氏 100 度,則傳回,否則傳回0
。 -
公制:
boiling_count = sum(is_boiling)
— 傳回水沸騰的資料點數目。
公式中的後期資料
AWS IoT SiteWise 支援最多 7 天的資料延遲擷取。當 AWS IoT SiteWise 接收到延遲資料時,它會重新計算在過去視窗中輸入延遲資料的任何量度的現有值。這些重新計算會產生資料處理費用。
注意
AWS IoT SiteWise 計算輸入晚期資料的屬性時,會使用每個屬性的目前公式運算式。
AWS IoT SiteWise 重新計算過去的度量時段之後,它會取代該視窗的先前值。如果您啟用了該測量結果的通知, AWS IoT SiteWise 也會發出屬性值通知。這表示您可以針對先前收到通知的相同屬性和時間戳記,接收新的屬性值更新通知。如果您的應用程式或資料湖使用屬性值通知,您必須使用新的值來更新之前的值,使其資料正確無誤。
公式中的資料品質
在中 AWS IoT SiteWise,每個資料點都有一個品質代碼,可以是下列其中一種:
-
GOOD
— 數據不受任何問題的影響。 -
BAD
— 數據受到傳感器故障等問題的影響。 -
UNCERTAIN
— 數據受到傳感器不准確等問題的影響。
AWS IoT SiteWise 計算轉換和指標時,只會消耗GOOD
品質資料。 AWS IoT SiteWise 僅輸出GOOD
品質資料以成功計算。如果計算不成功,則 AWS IoT SiteWise 不會為該計算輸出數據點。如果計算導致未定義、無限或溢出值,則可能會發生這種情況。
如需如何查詢資料及依資料品質篩選的詳細資訊,請參閱 查詢資料來源 AWS IoT SiteWise。
未定義、無限和溢出值
某些公式運算式 (例如x / 0
sqrt(-1)
、或log(0)
) 會計算在實數系統中未定義、無限或超出支援範圍的值 AWS IoT SiteWise。當資產屬性的運算式計算未定義、無限或溢位值時, AWS IoT SiteWise 不會輸出該計算的資料點。
AWS IoT SiteWise 如果將非數值作為公式運算式的結果來計算資料點,也不會輸出資料點。這意味著,如果您定義一個計算字符串,數組或 none 常量的公式,那麼 AWS IoT SiteWise 不會輸出該計算的數據點。
範例
下列每個公式運算式都會產生無法 AWS IoT SiteWise 以數字表示的值。 AWS IoT SiteWise 計算這些公式運算式時,不會輸出資料點。
-
x / 0
未定義。 -
log(0)
未定義。 -
sqrt(-1)
在實數系統中未定義。 -
"hello" + " world"
是一個字符串。 -
jp('{"values":[3,6,7]}', '$.values')
是一個數組。 -
if(gte(temp, 300), temp, none)
是none
何temp
時小於300
。