

 Amazon Forecast 不再向新买家开放。Amazon Forecast 的现有客户可以继续照常使用该服务。[了解更多](https://aws.amazon.com/blogs/machine-learning/transition-your-amazon-forecast-usage-to-amazon-sagemaker-canvas/)

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

# 假设分析
<a name="what-if"></a>

 假设分析是一种工具，可用于调查和解释不同方案可能对 Amazon Forecast 创建的基准预测产生的影响。基准预测是 Amazon Forecast 根据您提供的原始相关时间序列创建的预测。

假设分析会根据您选择修改相关时间序列的方式创建一系列假设分析预测。将这些假设预测与基准预测进行比较和对比，有助于您了解具体的变化会如何影响您的模型。

有两种创建已修改的相关时间序列的方法。您可以在 Amazon S3 路径中提供已修改的相关时间序列，也可以为现有的相关时间序列指定一组转换。在指定一组转换时，会创建原始相关时间序列的副本以包含这些更改。

此转换允许您创建相关时间序列的子集并修改相关时间序列的特定属性。有关更多信息，请参阅[替换数据集](replacement-series.md) 和[转换函数](data-transformations.md)。

**Topics**
+ [创建假设分析](#how-what-if-works)
+ [转换函数](data-transformations.md)
+ [替换数据集](replacement-series.md)

## 创建假设分析
<a name="how-what-if-works"></a>

假设分析讨论了基准相关时间序列的变化如何影响预测。您只能根据使用. 的预测创建假设分析。 AutoPredictor在创建假设分析后，您可以创建一个或多个假设分析预测。比较假设分析预测和基准预测，然后导出一个或多个假设分析预测。

**注意**  
您的数据必须采用逗号分隔值（CSV）格式，以创建假设分析。

**Topics**
+ [创建假设分析](#create-analysis)
+ [创建假设分析预测](#create-forecast)
+ [比较假设分析预测](#compare-forecasts)
+ [导出假设分析预测](#export-forecasts)
+ [查询假设分析预测](#query-wi-forecasts)

### 创建假设分析
<a name="create-analysis"></a>

您可以使用 Forecast 控制台或 Forecast 软件开发工具包 (SDK) 创建假设分析。

------
#### [ Console ]

要创建假设分析，请完成以下步骤。

1. 创建使用训练过的预测 AutoPredictor。

1. 打开包含您感兴趣的预测的数据集组控制面板。

1. 选择**探索假设分析**。

1. 在 Insights 页面中的**假设分析**选项卡上，选择**创建**。

1. 在 **假设分析名称**字段中提供一个唯一名称，然后为此分析选择基准预测。

1. 在**项目选择**区域中，选择是否要在分析中自动包含所有项目，还是要指定包含带文件的项目。

   如果您选定**选择带文件的项目**，则必须提供一个数据集，该数据集正好包含要在假设分析预测中修改的项目。有关更多信息，请参阅 [指定时间序列](forecast-explainability.md#forecast-explainability-time-series)。

1. 选择**创建假设分析**。假设分析页面顶部的横幅会显示假设分析创建作业的状态。

------
#### [ SDK ]

使用该[CreateWhatIfAnalysis](API_CreateWhatIfAnalysis.md)操作，为其提供基准预测的唯一名称 WhatIfAnalysisName 并提供预测 ARN。 ForecastArn下面的示例显示了使用“item\$1id”和“store\$1location”维度组合的时间序列架构。有关更多信息，请参阅 [指定时间序列](forecast-explainability.md#forecast-explainability-time-series)。

```
{
  "ForecastArn": "arn:aws:forecast:region:acctNumber:forecast/baselineForecast",
  "WhatIfAnalysisName": "unique_name",
  "TimeSeriesSelector": {
    "TimeSeriesIdentifiers": {
      "DataSource": {
        "S3Config": {
          "Path": "s3://bucket/example-path",
          "RoleArn": "arn:aws:iam::000000000000:role/ExampleRole"
        }
      },
      "Schema": {
        "Attributes": [
          {
            "AttributeName": "item_id",
            "AttributeType": "string"
          }
          { 
            "AttributeName": "store_location",
            "AttributeType": "string"
          }
        ]
      }
    }
  }
}
```

------

### 创建假设分析预测
<a name="create-forecast"></a>

您可以使用 Forecast 控制台或 Forecast 软件开发工具包 (SDK) 创建假设分析预测。

------
#### [ Console ]

要创建假设分析预测，请完成以下步骤：

1. 在 Insights 页面的**假设分析**选项卡上，选择您感兴趣的假设分析。

1. 在**假设分析预测**部分中，选择**创建**。

1. 在创建假设分析预测的页面上，提供唯一的**假设分析预测名称**，然后选择**使用转换函数**或**使用替换数据集定义假设预测**。有关更多信息，请参阅[替换数据集](replacement-series.md) 和[转换函数](data-transformations.md)。

   1. 如果您选择**使用转换函数**，则必须使用**转换函数生成器**来选择和修改假设分析预测中包含的行。所有转换都将按其指定的顺序应用。条件按其指定的顺序应用，并使用 AND 操作进行连接。要满足所有条件才能应用转换。

   1. 如果您选择**使用替换数据集定义假设分析预测**，则必须提供一个替换数据集，该数据集只包含要为假设分析预测修改的行。

1. 选择**创建**。

------
#### [ SDK - Transformation Function ]

使用该[CreateWhatIfForecast](API_CreateWhatIfForecast.md)操作，为其提供唯一名称 WhatIfAnalysisName 并提供您的预测 ARN。 ForecastArn下面的示例显示了当“store\$1location”不是“tacoma”时转换为“价格”的架构。

```
{
  "WhatIfAnalysisArn": "arn:aws:forecast:us-west-2:666488130463:what-if-analysis/jan2020forecast/PromotionAnalysis_01G8MB3PZM89J9V1VEXCC0BS63",
  "WhatIfForecastName": "unique_name",
  "TimeSeriesTransformations": [
    {
      "Action": {
        "AttributeName": "price",
        "Operation": "MULTIPLY",
        "Value": 0.85
      },
      "TimeSeriesConditions": [
        {
          "AttributeName": "store_location",
          "AttributeValue": "tacoma",
          "Condition": "NOT_EQUALS"
        }
      ]
    }
  ]
}
```

在此示例中，`jan2020forecast` 是基准预测，`PromotionAnalysis_01G8MB3PZM89J9V1VEXCC0BS63` 是假设分析的名称。

您也可以通过 [TimeSeriesReplacementsDataSource](API_TimeSeriesReplacementsDataSource.md) 操作指定一个替换数据集。

------
#### [ SDK - Replacement Dataset ]

使用该[CreateWhatIfForecast](API_CreateWhatIfForecast.md)操作，为其提供唯一名称 WhatIfAnalysisName 并提供您的预测 ARN。 ForecastArn下面的示例显示了一个替换数据源的架构。

```
{
  "WhatIfAnalysisArn": "arn:aws:forecast:us-west-2:666488130463:what-if-analysis/jan2020forecast/PromotionAnalysis_01G8MB3PZM89J9V1VEXCC0BS63",
  "WhatIfForecastName": "unique_name",
  "TimeSeriesReplacementsDataSource": {
    "S3config": {
      "Path" : "s3://bucket-name/replacementDatasource.csv",
      "RoleArn": "arn:aws:iam::acct-id:role/Role"
    },
    "Schema": {
      Attributes" : [
        {
          "AttributeName": "item_id",
          "AttributeType": "string"
        },
        {
          "AttributeName": "timestamp",
          "AttributeType": "timestamp"
        },
        {
          "AttributeName": "price",
          "AttributeType": "float"
        },
        {
          "AttributeName": "stock_count",
          "AttributeType": "integer"
        },
      ]
    }
  }
}
```

您还可以通过 [TimeSeriesTransformation](API_TimeSeriesTransformation.md) 操作来指定对相关时间序列的更改。

------

### 比较假设分析预测
<a name="compare-forecasts"></a>

要比较假设分析预测，请在 Forecast 控制台中完成以下步骤：

1. 在 Insights 页面中的**假设分析**选项卡上，选择您感兴趣的假设分析。

1. 在**比较假设分析预测**的部分中，指定要分析的项目、一个或多个**假设分析预测**以及至少一种**预测类型**。  
![\[Interface for comparing what-if forecasts with baseline forecast, showing input fields and graph.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/compareWhatIfForecasts.png)

   在此示例中，有两种假设分析预测，即 `priceCut10pct` 和 `priceIncrease20pct`，它们与 `item_105` 的预测类型 `p50`、`p10` 和 `p90` 进行了比较。该图表允许您查看这些预测与基准时间序列的对比情况。

1. 将鼠标悬停在图表上，以查看假设分析预测与基准预测的比较情况。

### 导出假设分析预测
<a name="export-forecasts"></a>

您可以使用 Forecast 控制台或 Forecast 软件开发工具包 (SDK) 导出假设分析预测。

------
#### [ Console ]

要导出假设分析预测，请执行以下步骤：

1. 在 Insights 页面中的**假设分析**选项卡上，选择您感兴趣的假设分析。

1. 在**假设分析预测导出**的部分中，选择**创建导出**。

1. 在创建假设分析预测导出的页面上，提供唯一的**假设分析预测导出名称**，指定要包含的**假设分析预测**，选择**导出位置**，然后提供 **IAM 角色**。

1. 选择**创建导出**。

------
#### [ SDK ]

使用 [CreateWhatIfForecastExport](API_CreateWhatIfForecastExport.md) 操作，将“目标”配置为指向将包含导出内容的 Amazon S3 存储桶。指定要导出的具体假设分析预测，并为导出提供一个唯一的名称。

```
{
  "WhatIfForecastArns": [ "arn:aws:forecast:region:acctNumber:what-if-forecast/id1" , "arn:aws:forecast:region:acctNumber:what-if-forecast/id2" ],
  "WhatIfForecastExportName": "unique_export_name",
  "Destination": {
    "S3Config": {
      "Path": "s3://bucket/example-path",
      "RoleArn": "arn:aws:iam::000000000000:role/ExampleRole"
    }
  },
}
```

------

### 查询假设分析预测
<a name="query-wi-forecasts"></a>

您可以使用 [QueryWhatIfForecast](API_forecastquery_QueryWhatIfForecast.md) 操作查询假设分析预测。默认情况下，返回预测的完整范围。您可以请求完整预测中的特定日期范围。

当您查询假设分析预测时，必须指定筛选条件。筛选条件是密钥值对。键是用于创建预测的其中一个数据集中的架构属性名称之一（包括预测维度）。值 是指定密钥的有效值。您可以指定多个密钥值对。返回的假设分析预测将只包含满足所有条件的项目。

例如，使用此代码获取 `product_42` 的假设分析预测。

```
{
          "Filters": { 
          "item_id" : "product_42"
          },
          "WhatIfForecastArn": "arn:aws:forecast:region:acctNumber:what-if-forecast/id1"
}
```

# 转换函数
<a name="data-transformations"></a>

转换函数是一组操作，可用于选择和修改相关时间序列中的行。您可以通过条件操作来选择需要的行。然后，可以使用转换操作修改行。所有条件都使用 AND 操作连接，这表示所有条件都必须为 true，才能应用转换。将按转换列出的顺序应用转换。

在创建假设分析预测时，请使用**转换函数生成器**来指定要应用的条件和转换。下图对此功能进行了说明。

![\[Transformation function builder interface with options to modify price and stock count.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/transformationFunctionsMod.png)


在突出显示的部分中，对于 `tacoma`（即华盛顿州塔科马市）商店中标颜色 `blue` 的项目，`price` 列乘以 0.90（即 10％ 的折扣）。为此，Amazon Forecast 首先要创建一个基准相关时间序列的子集，使其仅包含 `store` 中等于 `tacoma` 的行。

该子集被进一步缩减为仅包含 `color` 中等于 `blue` 的行。最后，将 `price` 列中的所有值乘以 0.90，以创建一个在假设分析预测中使用的新相关时间序列。

Amazon Forecast 支持以下条件：
+ `EQUALS` - 此列中的值与条件中提供的值相同。
+ `NOT_EQUALS` - 此列中的值与条件中提供的值不同。
+ `LESS_THAN` - 此列中的值小于条件中提供的值。
+ `GREATER_THAN` - 此列中的值大于条件中提供的值。

Amazon Forecast 支持以下操作：
+ `ADD` - 此列中的所有行都加上提供的值。
+ `SUBTRACT` - 从此列中的所有行中减去提供的值。
+ `MULTIPLY` - 此列中的所有行乘以提供的值。
+ `DIVIDE` - 此列中的所有行除以提供的值。

下面的示例显示了使用 SDK 指定时间序列变换的方式。

------
#### [ Example 1 ]

此示例对西雅图商店的所有项目应用 10% 的折扣。请注意，“城市”是一个预测维度。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 0.90
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      }
    ]
  }
]
```

------
#### [ Example 2 ]

此示例对“电子产品”类别中的所有项目应用 10% 的折扣。请注意，“product\$1category”是一个项目元数据。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 0.90
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "product_category",
        "AttributeValue": "electronics",
        "Condition": "EQUALS"
      }
    ] 
  }
]
```

------
#### [ Example 3 ]

此示例对特定 item BOA21314 \$1id K 应用了 20% 的加价。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 1.20
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "item_id",
        "AttributeValue": "BOA21314K",
        "Condition": "EQUALS"
      }
    ] 
  }
]
```

------
#### [ Example 4 ]

此示例为西雅图和贝尔维尤商店的所有项目增加 1 美元。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "ADD",
      "Value": 1.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      }
    ] 
  },
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "ADD",
      "Value": 1.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "bellevue",
        "Condition": "EQUALS"
      }
    ] 
  }
]
```

------
#### [ Example 5 ]

此示例为 2022 年 9 月西雅图商店的所有项目减去 1 美元。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "SUBTRACT",
      "Value": 1.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      },
      {
        "AttributeName": "timestamp",
        "AttributeValue": "2022-08-31 00:00:00",
        "Condition": "GREATER_THAN"
      },
      {
        "AttributeName": "timestamp",
        "AttributeValue": "2022-10-01 00:00:00",
        "Condition": "LESS_THAN"
      }
    ] 
  }
]
```

------
#### [ Example 6 ]

在此示例中，价格先乘以 10，然后再减去 5 美元。请注意，此类操作是按照声明的顺序应用的。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 10.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      }
    ]
    },
    {
    "Action": {
      "AttributeName": "price",
      "Operation": "SUBTRACT",
      "Value": 5.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      }
    ] 
   }
]
```

------
#### [ Example 7 ]

因为此示例创建了一个空集，所以此操作不适用于任何时间序列。此代码试图修改西雅图和贝尔维尤商店中所有项目的价格。由于条件与 AND 操作相结合，并且一家商店只能位于一座城市，所以结果为空集。因此，此操作不适用。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 10.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      },
      {
        "AttributeName": "city",
        "AttributeValue": "bellevue",
        "Condition": "EQUALS"
      },
    ] 
  }
]
```

有关如何将一个条件应用于多个属性的示例，请参阅示例 4。

------
#### [ Example 8 ]

使用时间戳的转换条件适用于边界对齐的数据，而不适用于原始数据。例如，您每小时输入一次数据，然后每天进行预测。在本用例中，Forecast 会将时间戳与当天对齐，因此将 `2020-12-31 01:00:00` 与 `2020-12-31 00:00:00` 对齐。此代码将创建一个空集，因为它没有在边界对齐的时间戳处指定时间戳。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 10.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "timestamp",
        "AttributeValue": "2020-12-31 01:00:00",
        "Condition": "EQUALS"
      },
    ] 
  }
]
```

------

# 替换数据集
<a name="replacement-series"></a>

替换数据集是基准相关时间序列的修改版本，其中只包含要在假设分析预测中修改的值。替换数据集必须包含基准相关时间序列以及至少 1 个已修改时间序列中的预测维度、项目标识符和时间戳。此数据集会与基准相关时间序列合并，以创建假设分析预测使用的转换数据集。替换数据集必须采用 CSV 格式。

此数据集不应包含相同时间序列的重复时间戳。

下面几个示例说明了如何指定替换时间序列以及如何解释这些规范。考虑您每天进行预测的情况，预测范围是 2022-08-01 到 2022-08-03。下表列出了所有示例的基准相关时间序列。


| item\$1id | timestamp | 价格 | stock\$1count | 
| --- | --- | --- | --- | 
| item\$11 | 2022-08-01 | 100 | 50 | 
| item\$11 | 2022-08-02 | 100 | 50 | 
| item\$11 | 2022-08-03 | 100 | 50 | 
| item\$12 | 2022-08-01 | 75 | 500 | 
| item\$12 | 2022-08-02 | 75 | 500 | 
| item\$12 | 2022-08-03 | 75 | 500 | 

------
#### [ Unchanged values ]

要为 2022-08-02 和 2022-08-03 的 item\$11 应用 10% 的折扣，只需为替换数据集指定以下内容：


**替换数据集**  

| item\$1id | timestamp | 价格 | 
| --- | --- | --- | 
| item\$11 | 2022-08-02 | 90 | 
| item\$11 | 2022-08-03 | 90 | 

但是，也可以在替换数据集中指定未修改的值。在以下三个表中的每个表都作为替换数据集使用时，将产生与先前所提供的表相同的结果。


**列未修改的替换数据集**  

| item\$1id | timestamp | 价格 | stock\$1count | 
| --- | --- | --- | --- | 
| item\$11 | 2022-08-02 | 90 | 50 | 
| item\$11 | 2022-08-03 | 90 | 50 | 


**行未修改的替换数据集**  

| item\$1id | timestamp | 价格 | 
| --- | --- | --- | 
| item\$11 | 2022-08-01 | 100 | 
| item\$11 | 2022-08-02 | 90 | 
| item\$11 | 2022-08-03 | 90 | 
| item\$12 | 2022-08-01 | 75 | 
| item\$12 | 2022-08-02 | 75 | 
| item\$12 | 2022-08-03 | 75 | 


**行和列都未修改的替换数据集**  

| item\$1id | timestamp | 价格 | stock\$1count | 
| --- | --- | --- | --- | 
| item\$11 | 2022-08-01 | 100 | 50 | 
| item\$11 | 2022-08-02 | 90 | 50 | 
| item\$11 | 2022-08-03 | 90 | 50 | 
| item\$12 | 2022-08-01 | 75 | 500 | 
| item\$12 | 2022-08-02 | 75 | 500 | 
| item\$12 | 2022-08-03 | 75 | 500 | 

------
#### [ Missing values ]

替换时间序列中的缺失值将替换为基准相关时间序列中的值。考虑如下方案，即你为 2022-08-02 和 2022-08-03 的 item\$11 应用 10％ 的折扣，并在 2022-08-01 增加 item\$12 的库存。此替换数据集完全足够：


**有缺失值的替换数据集**  

| item\$1id | timestamp | 价格 | stock\$1count | 
| --- |--- |--- |--- |
| item\$11 | 2022-08-02 | 90 |  | 
| --- |--- |--- |--- |
| item\$11 | 2022-08-03 | 90 |  | 
| --- |--- |--- |--- |
| item\$12 | 2022-08-01 |  | 5000 | 
| --- |--- |--- |--- |

此表中缺少的值是从基准相关时间序列中估算的值。

------
#### [ Extraneous values ]

在创建假设分析预测时，会忽略替换时间序列中的多余值。即不会对替换数据集中无基准相关时间序列对应值的值进行建模。考虑此替换数据集：


**有多余值的替换数据集**  

| item\$1id | timestamp | 价格 | stock\$1count | 
| --- |--- |--- |--- |
| item\$11 | 2022-08-01 | 100 | 50 | 
| item\$11 | 2022-08-02 | 100 | 50 | 
| item\$11 | 2022-08-03 | 100 | 50 | 
| item\$12 | 2022-08-01 | 75 | 500 | 
| item\$12 | 2022-08-02 | 75 | 500 | 
| item\$12 | 2022-08-03 | 75 | 500 | 
| item\$13 | 2022-08-01 | 50 | 125 | 
| --- |--- |--- |--- |
| item\$13 | 2022-08-02 | 50 | 125 | 
| --- |--- |--- |--- |
| item\$13 | 2022-08-03 | 50 | 125 | 
| --- |--- |--- |--- |

忽略包含 item\$13 的行，并且此行不属于假设分析的一部分。

------
#### [ Historical changes ]

忽略替换数据集中超出预测范围的变更内容。考虑此替换数据集：


**值超出预测范围的替换数据集**  

| item\$1id | timestamp | 价格 | stock\$1count | 
| --- |--- |--- |--- |
| item\$11 | 2022-07-31 | 100 | 50 | 
| --- |--- |--- |--- |
| item\$11 | 2022-08-01 | 100 | 50 | 
| item\$11 | 2022-08-02 | 100 | 50 | 
| item\$11 | 2022-08-03 | 100 | 50 | 
| item\$11 | 2022-08-04 | 100 | 50 | 
| --- |--- |--- |--- |
| item\$12 | 2022-07-31 | 75 | 500 | 
| --- |--- |--- |--- |
| item\$12 | 2022-08-01 | 75 | 500 | 
| item\$12 | 2022-08-02 | 75 | 500 | 
| item\$12 | 2022-08-03 | 75 | 500 | 
| item\$13 | 2022-08-04 | 75 | 500 | 
| --- |--- |--- |--- |

忽略包含 2022-07-31 和 2022-08-04 的行，这类行不属于假设分析的一部分。

------

## 预测维度
<a name="forecast-dimensions"></a>

如果您的数据集包含预测维度，则此预测维度必须包含在替换数据集中。考虑此基准相关时间序列：


| item\$1id | store\$1id | timestamp | 价格 | stock\$1count | 
| --- | --- | --- | --- | --- | 
| item\$11 | store\$11 | 2022-08-01 | 100 | 50 | 
| item\$11 | store\$11 | 2022-08-02 | 100 | 50 | 
| item\$11 | store\$11 | 2022-08-03 | 100 | 50 | 
| item\$11 | store\$12 | 2022-08-01 | 75 | 500 | 
| item\$11 | store\$12 | 2022-08-02 | 75 | 500 | 
| item\$11 | store\$12 | 2022-08-03 | 75 | 500 | 

因此，所有商店在 2022-08-02 提供 10% 折扣的替代数据集将如下所示：


| item\$1id | store\$1id | timestamp | 价格 | 
| --- | --- | --- | --- | 
| item\$11 | store\$11 | 2022-08-02 | 90 | 
| item\$11 | store\$12 | 2022-08-02 | 67.5 | 