

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 转换数据（转换）
<a name="transforms"></a>

*转换*是将资产属性的数据点从一种形式映射到另一种形式的数学表达式。转换表达式由资产属性变量、文字、运算符和函数组成。变换后的数据点与输入数据点有关 one-to-one系。 AWS IoT SiteWise 每当任何输入属性接收到新的数据点时，都会计算一个新的转换数据点。

**注意**  
对于具有相同时间戳的属性更新，输出值可能会被来自其他传入属性的更新所覆盖。

例如，如果您的资产具有以摄氏度为单位的名为 `Temperature_C` 的温度测量流，您可以使用公式 `Temperature_F = 9/5 * Temperature_C + 32` 将每个数据点转换为华氏度。每次在`Temperature_C`测量流中 AWS IoT SiteWise 接收到一个数据点时，相应的`Temperature_F`值将在几秒钟内计算出来，并作为`Temperature_F`属性提供。

如果您的转换包含多个变量，则较早到达的数据点会立即启动计算。举一个例子，其中零件制造商使用转换来监控产品质量。制造商根据零件类型使用不同的标准，使用以下测量值来表示过程：
+ `Part_Number` - 用于标识零件类型的字符串。
+ `Good_Count` - 一个整数，如果零件符合标准，则该整数将增加 1。
+ `Bad_Count` - 一个整数，如果零件不符合标准，则该整数会增加 1。

制造商还创建了一个等于 ` if(eq(Part_Number, "BLT123") and (Bad_Count / (Good_Count + Bad_Count) > 0.1), "Caution", "Normal")` 的转换 `Quality_Monitor`。

此转换可监控为特定零件类型生产的不良零件的百分比。如果部件号为， BLT123 且不良部件的百分比超过 10% (0.1)，则转换将返回`"Caution"`。否则，转换将返回 `"Normal"`。

**注意**  
如果 `Part_Number` 在其他测量之前收到新的数据点，则 `Quality_Monitor` 转换将使用新 `Part_Number` 值和最新的 `Good_Count` 和 `Bad_Count` 值。为避免错误，请在下次制造运行之前重置 `Good_Count` 和 `Bad_Count`。
如果您只想在所有变量都收到新的数据点后才计算表达式，请使用[指标](metrics.md)。

**Topics**
+ [定义转换（控制台）](#define-transforms-console)
+ [定义转换（AWS CLI）](#define-transform-cli)

## 定义转换（控制台）
<a name="define-transforms-console"></a>

在 AWS IoT SiteWise 控制台中为资产模型定义转换时，需要指定以下参数：
+ <a name="asset-property-name-console"></a>**名称** – 属性的名称。
+ <a name="asset-property-unit-console"></a>**单位** – （可选）属性的科学单位，例如毫米或摄氏度。
+ **数据类型** - 转换的数据类型，可以是**双**精度或 **字符串**。
+ **外部 ID** -（可选）这是用户定义的 ID。有关更多信息，请参阅《AWS IoT SiteWise 用户指南》**中的 [使用外部引用对象 IDs](object-ids.md#external-id-references)。
+ **公式** – 转换表达式。转换表达式不能使用聚合函数或时间函数。要打开自动完成特征，则开始键入或按向下箭头键。有关更多信息，请参阅 [使用公式表达式](formula-expressions.md)。
**重要**  <a name="transform-input-rules"></a>
转换可以输入整型、双精度、布尔或字符串类型的属性。布尔值转换为 `0`（假）和 `1`（真）。  
转换必须输入一个或多个非特性属性。每次输入非特性属性接收新数据点时， AWS IoT SiteWise 都会计算一个新的转换数据点。新属性值不会启动转换更新。资产属性数据 API 操作的请求速率同样适用于转换计算结果。  
<a name="formula-output-rules"></a>公式表达式只能输出双精度值或字符串值。嵌套表达式可以输出其他数据类型，例如字符串，但整个公式的计算结果必须为数字或字符串。您可以使用 [jp 函数](expression-string-functions.md#jp-definition)将字符串转换为数字。布尔值必须为 1（真）或 0（假）。有关更多信息，请参阅 [未定义值、无限值和溢出值](expression-tutorials.md#undefined-values)。

有关更多信息，请参阅 [创建资产模型（控制台）](create-asset-models.md#create-asset-model-console)。

## 定义转换（AWS CLI）
<a name="define-transform-cli"></a>

使用 AWS IoT SiteWise API 为资产模型定义转换时，需要指定以下参数：
+ <a name="asset-property-name-cli"></a>`name` – 属性的名称。
+ <a name="asset-property-unit-cli"></a>`unit` – （可选）属性的科学单位，例如毫米或摄氏度。
+ `dataType` – 转换的数据类型，必须为 `DOUBLE` 或`STRING`。
+ `externalId` -（可选）这是用户定义的 ID。有关更多信息，请参阅《AWS IoT SiteWise 用户指南》**中的 [使用外部引用对象 IDs](object-ids.md#external-id-references)。
+ `expression` – 转换表达式。转换表达式不能使用聚合函数或时间函数。有关更多信息，请参阅 [使用公式表达式](formula-expressions.md)。
+ `variables` – 定义要在表达式中使用的资产的其他属性的变量列表。每个变量结构包含一个在表达式中使用的简单名称，以及一个指定哪个属性与该变量关联的 `value` 结构。`value` 结构包含以下信息：
  + `propertyId` – 要从中输入值的属性的 ID。您可以使用属性的名称而不是其 ID。
**重要**  <a name="transform-input-rules"></a>
转换可以输入整型、双精度、布尔或字符串类型的属性。布尔值转换为 `0`（假）和 `1`（真）。  
转换必须输入一个或多个非特性属性。每次输入非特性属性接收新数据点时， AWS IoT SiteWise 都会计算一个新的转换数据点。新属性值不会启动转换更新。资产属性数据 API 操作的请求速率同样适用于转换计算结果。  
<a name="formula-output-rules"></a>公式表达式只能输出双精度值或字符串值。嵌套表达式可以输出其他数据类型，例如字符串，但整个公式的计算结果必须为数字或字符串。您可以使用 [jp 函数](expression-string-functions.md#jp-definition)将字符串转换为数字。布尔值必须为 1（真）或 0（假）。有关更多信息，请参阅 [未定义值、无限值和溢出值](expression-tutorials.md#undefined-values)。

**Example 转换定义**  
以下示例演示了将资产的温度测量数据从摄氏度转换为华氏度的转换属性。此对象是包含[变换[AssetModelProperty](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetModelProperty.html)](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_Transform.html)的示例。您可以将此对象指定为 [CreateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_CreateAssetModel.html) 请求负载的一部分，以创建转换属性。有关更多信息，请参阅 [创建资产模型（AWS CLI）](create-asset-models.md#create-asset-model-cli)。  

```
{
{{...}}
"assetModelProperties": [
{{...}}
{
  "name": "Temperature F",
  "dataType": "DOUBLE",
  "type": {
    "transform": {
      "expression": "9/5 * temp_c + 32",
      "variables": [
        {
          "name": "temp_c",
          "value": {
            "propertyId": "Temperature C"
          }
        }
      ]
    }
  },
  "unit": "Fahrenheit"
}
],
{{...}}
}
```

**Example 包含三个变量的转换定义**  
以下示例演示了一个变换属性，如果超过 10% 的 BLT123 部件不符合标准，则该属性会返回警告消息 (`"Caution"`)。否则，它将返回一条信息消息 (`"Normal"`)。  

```
{
{{...}}
"assetModelProperties": [
{{...}}
{
"name": "Quality_Monitor",
"dataType": "STRING",
"type": {
    "transform": {
        "expression": "if(eq(Part_Number,"BLT123") and (Bad_Count / (Good_Count + Bad_Count) > 0.1), "Caution", "Normal")",
        "variables": [
            {
                "name": "Part_Number",
                "value": {
                    "propertyId": "Part Number"
                }
            },
            {
                "name": "Good_Count",
                "value": {
                    "propertyId": "Good Count"
                }
            },
            {
                "name": "Bad_Count",
                "value": {
                    "propertyId": "Bad Count"
                }
            }
        ]
    }
}
}
{{...}}
}
```