公式表達式教學課程 - AWS IoT SiteWise

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

公式表達式教學課程

您可以遵循這些教學課程來使用 中的公式表達式 AWS IoT SiteWise。

在公式中使用字串

您可以在公式表達式中的字串上操作 。您也可以從參考屬性和測量屬性的變數輸入字串。

重要

公式表達式只能輸出雙數或字串值。巢狀運算式可以輸出其他資料類型,例如字串,但整體公式必須評估為數字或字串。您可以使用 jp 函數將字串轉換為數字。布林值必須為 1 (true) 或 0 (false)。如需詳細資訊,請參閱未定義、無限和溢出值

AWS IoT SiteWise 提供下列公式表達式功能,可用於在字串上操作:

篩選資料點

如果函數篩選不符合條件的資料點,您可以使用 。if 函數會評估條件,並傳回 truefalse結果的不同值。您可以使用無常數作為函數一個案例的輸出if,以捨棄該案例的資料點。

篩選符合條件的資料點
  • 建立使用 if函數的轉換,以定義條件,檢查是否符合條件,並傳回 none result_if_trueresult_if_false值。

範例:篩選水未沸騰的資料點

假設您有一個測量 temp_c,可提供機器中水溫 (攝氏) 的案例。您可以定義下列轉換,以篩選水未沸騰的資料點:

  • 轉換: boiling_temps = if(gte(temp_c, 100), temp_c, none) – 如果大於或等於攝氏 100 度,則傳回溫度,否則不會傳回資料點。

計數符合條件的資料點

您可以使用比較函數sum() 來計算條件為 true 的資料點數目。

計算符合條件的資料點
  1. 建立使用比較函數在另一個屬性上定義篩選條件的轉換。

  2. 建立可加總符合該條件之資料點的指標。

範例:計算水沸騰的資料點數量

假設您有一個測量 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 / 0sqrt(-1)log(0)) 會計算在實數系統中、無限或超出 支援範圍時未定義的值 AWS IoT SiteWise。當資產屬性的表達式運算未定義、無限或溢位值時, AWS IoT SiteWise 不會輸出該運算的資料點。

AWS IoT SiteWise 如果資料點運算非數值作為公式表達式的結果,也不會輸出資料點。這表示如果您定義計算字串、陣列或無常數的公式,則 AWS IoT SiteWise 不會輸出該運算的資料點。

範例

下列每個公式表達式都會產生 AWS IoT SiteWise 無法表示為 number 的值。當計算這些公式表達式時, 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