本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
公式表达式教程
您可以按照这些教程在Amazon IoT SiteWise.
在公式中使用字符串
您可以对公式表达式中的字符串进行操作。您还可以从引用属性和测量属性的变量中输入字符串。
公式表达式只能输出双精度值或字符串值。嵌套表达式可以输出其他数据类型,例如字符串,但整个公式的计算结果必须为数字或字符串。您可以使用日本 p 函数,将字符串转换为数字。布尔值必须为 1 (true)。有关更多信息,请参阅 未定义值、无限值和溢出值。
Amazon IoT SiteWise提供了以下可用于操作字符串的公式表达式表达式功能:
筛选数据点
您可以使用如果函数筛选出不符合条件的数据点。这些区域有: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)— 返回水沸腾的数据点数量。
公式中的延迟数据
Amazon IoT SiteWise支持对最长 7 天的数据进行延迟数据摄取。当 Amazon IoT SiteWise 收到延迟数据时,它重新计算在过去的时段中输入延迟数据的任何指标的现有值。这些重新计算会产生数据处理费用。
何时Amazon IoT SiteWise计算输入延迟数据的属性,它使用每个属性的当前公式表达式。
Amazon IoT SiteWise 为指标重新计算过去的时段后,它将替换该时段的前一个值。如果您为该指标启用了通知,Amazon IoT SiteWise 还会发出属性值通知。这意味着,您可以对您以前收到了通知的相同属性和时间戳收到新属性值更新通知。如果应用程序或数据湖使用属性值通知,则必须使用新值更新上一个值,以便其数据准确无误。
公式中的数据质量
在 Amazon IoT SiteWise 中,每个数据点都有一个质量代码,该代码可以是下列代码之一:
-
GOOD— 数据不受任何问题的影响。 -
BAD— 数据受传感器故障等问题的影响。 -
UNCERTAIN— 数据受传感器不准确等问题的影响。
Amazon IoT SiteWise 在计算转换和指标时仅使用 GOOD 质量数据。Amazon IoT SiteWise 仅输出 GOOD 质量数据以便成功进行计算。如果计算不成功,那么Amazon IoT SiteWise不会为该计算输出数据点。如果计算生成未定义值、无限值或溢出值,则会发生这种情况。
有关如何查询数据和按数据质量筛选的更多信息,请参阅查询资产属性值和聚合。
未定义值、无限值和溢出值
某些公式表达式(如 x / 0、sqrt(-1) 或 log(0))计算在实数系统中未定义的值、无限值或超出 Amazon IoT SiteWise 支持的范围的值。当资产属性的表达式在计算未定义值、无限值或溢出值时,Amazon IoT SiteWise不会为该计算输出数据点。
Amazon IoT SiteWise如果将非数字值作为公式表达式的结果计算,也不会输出数据点。这意味着,如果你定义了一个计算字符串、数组或none 常量,那么Amazon IoT SiteWise不会为该计算输出数据点。
例 示例
以下每个公式表达式都会生成一个值Amazon IoT SiteWise不能表示为数字。Amazon 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.