本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
公式式式式式式
您可以按照这些教程在中使用公式表达式Amazon IoT SiteWise。
在公式中使用字符串
您可以对公式表达式中的字符串进行操作。您也可以从引用属性和测量属性的变量中输入字符串。
公式表达式只能输出双精度值或字符串值。嵌套表达式可以输出其他数据类型,例如字符串,但整个公式的计算结果必须为数字或字符串。您可以使用 jp 函数将字符串转换为数字。布尔值必须为 1(真)或 0(假)。有关更多信息,请参阅未定义值、无限值和溢出值:
Amazon IoT SiteWise提供了可用于操作字符串的以下公式表达式功能:
筛选数据点
您可以使用 i f 函数筛选出不符合条件的数据点。该if
函数评估条件并为true
和false
结果返回不同的值。您可以使用 n one 常量作为if
函数某一案例的输出,以丢弃该案例的数据点。
筛选出符合条件的数据点
-
创建一个转换,使用该
if
函数定义一个条件,该条件检查条件是否得到满足,并以result_if_true
或result_if_false
值返回none
。
例 示例:过滤掉水未沸腾的数据点
假设你有一个测量值temp_c
,它提供机器中水的温度(以摄氏度为单位)。你可以定义以下变换来过滤掉水没有沸腾的数据点:
-
Transform:
boiling_temps = if(gte(temp_c, 100), temp_c, none)
— 如果温度大于或等于 100 摄氏度,则返回温度,否则不返回任何数据点。
计算符合条件的数据点
您可以使用比较函数和 sum () 来计算条件成立的数据点的数量。
计算符合条件的数据点
-
创建一个使用比较函数定义另一个属性的过滤条件的转换。
-
创建一个汇总满足该条件的数据点的指标。
例 示例:计算水沸腾的数据点数量
假设你有一个测量值temp_c
,它提供机器中水的温度(以摄氏度为单位)。您可以定义以下转换和指标属性来计算水沸腾的数据点数量:
-
Transform:
is_boiling = gte(temp_c, 100)
—1
如果温度大于或等于 100 摄氏度,则返回,否则返回0
。 -
Metric:
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如果计算非数字值作为公式表达式的结果,它也不会输出数据点。这意味着,如果您定义了计算字符串、数组或 n one 常量的公式,则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)
temp
是小于none
的时候300
。