

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

# 建立 Amazon Personalize 指標屬性
<a name="creating-metric-attribution"></a>

**重要**  
 在您建立指標屬性並記錄事件或匯入增量大量資料之後，每個指標都會產生一些每月 CloudWatch 成本。如需 CloudWatch 定價的相關資訊，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing/)頁面。若要停止傳送指標至 CloudWatch，[請刪除指標屬性](deleting-metric-attribution.md)。

若要開始產生指標報告，您可以建立指標屬性並匯入互動資料。當您建立指標屬性時，您可以指定要報告的事件類型清單。對於每個事件類型，您可以指定 Amazon Personalize 在收集資料時套用的函數。可用的函數包括 `SUM(DatasetType.COLUMN_NAME)`和 `SAMPLECOUNT()`。

 例如，您可能有一個線上影片串流應用程式，並想要追蹤兩個指標：建議的點擊率，以及觀看電影的總長度，其中項目資料集中的每個影片都包含`LENGTH`屬性。您可以建立指標屬性，並新增兩個指標，每個指標都有 事件類型和 函數。第一個可能適用於具有 `SAMPLECOUNT()`函數`Click`的事件類型。第二個可能適用於具有 `SUM(Items.LENGTH)`函數`Watch`的事件類型。

您只能將`SUM()`函數套用至項目和項目互動資料集的數值欄。若要將`SUM()`函數套用至項目資料集中的資料欄，您必須先匯入項目中繼資料。

 您可以使用 Amazon Personalize 主控台 AWS Command Line Interface或 AWS SDKS 建立指標屬性。

**Topics**
+ [建立指標屬性 （主控台）](#create-metric-attribution-console)
+ [建立指標屬性 (AWS CLI)](#create-metric-attribution-cli)
+ [建立指標屬性 (AWS SDKs)](#create-metric-attribution-sdk)

## 建立指標屬性 （主控台）
<a name="create-metric-attribution-console"></a>

 若要使用 Amazon Personalize 主控台建立指標屬性，請導覽至**指標屬性**頁面，然後選擇**建立指標屬性**。當您建立指標屬性時，您可以指定選用的 Amazon S3 儲存貯體路徑、Amazon Personalize IAM 服務角色，以及要報告的指標清單。

 當您使用 Amazon Personalize 主控台建立項目互動資料集匯入任務時，您可以選擇在新索引標籤中建立指標屬性。然後，您可以返回匯入任務來完成它。如果您已在**設定指標屬性**頁面上，您可以跳到步驟 4。

**建立指標屬性**

1. 在 [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home)：// 開啟 Amazon Personalize 主控台並登入您的帳戶。

1. 選擇您的資料集群組。

1. 在導覽窗格的**自訂資源**下，選擇**指標屬性**。

1. 在**指標屬性詳細資訊**中，選擇**建立指標屬性**。

1. 在**設定指標屬性**頁面上，為指標屬性命名。

1. 如果您想要將指標發佈至 Amazon S3 for **Amazon S3 資料輸出路徑**，請輸入目的地 Amazon S3 儲存貯體。這可讓 選項在您每次建立資料集匯入任務時發佈指標。使用下列語法：

   **s3://amzn-s3-demo-bucket/<folder> path>**

1. 如果您使用 AWS KMS 進行加密，請在 **KMS 金鑰 ARN** 中輸入金鑰 AWS KMS 的 Amazon Resource Name (ARN)。您必須授予 Amazon Personalize 和 Amazon Personalize IAM 服務角色許可，才能使用您的金鑰。如需詳細資訊，請參閱[授予 Amazon Personalize 許可以使用您的 AWS KMS 金鑰](granting-personalize-key-access.md)。

1. 在 **IAM 角色**中，選擇建立新的服務角色或使用現有的服務角色。您選擇的角色必須具有 CloudWatch 的`PutMetricData`許可。如果您想要發佈至 Amazon S3，角色必須具有 Amazon S3 儲存貯體的`PutObject`許可。

   若要使用您在 中建立的角色[為 Amazon Personalize 建立 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)，您可能需要為 CloudWatch 和 Amazon S3 新增政策。

   如需政策範例，請參閱 [授予 Amazon Personalize 對 CloudWatch 的存取權](metric-attribution-requirements.md#metric-attribution-cw-permissions)和 [讓 Amazon Personalize 存取您的 Amazon S3 儲存貯體](metric-attribution-requirements.md#metric-attribution-s3-permissions)。

1. 選擇**下一步**。

1. 在**定義指標屬性**頁面上，選擇如何定義指標。選擇**建置指標屬性**以使用建置器工具。選擇**輸入指標屬性**，以 JSON 格式輸入指標。
   + 如果您選擇**建置指標屬性**，則每個指標都會提供名稱、事件類型，然後選擇函數。針對`SUM()`函數，選擇欄名稱。選擇**新增指標屬性**以新增其他指標。
   + 如果您選擇**輸入指標屬性**，請以 JSON 格式輸入每個指標。以下說明如何格式化指標。

     ```
     {
         "EventType": "watch",
         "MetricName": "MinutesWatchedTracker", 
         "MetricMathExpression": "SUM(Items.LENGTH)"
     }
     ```

1. 選擇**下一步**。

1. 在**檢閱和建立頁面上**，檢閱新指標屬性的詳細資訊。若要進行變更，請選擇 **Previous (上一步)**。若要建立指標屬性，請選擇**建立**。當指標屬性處於作用中狀態時，您可以開始匯入資料並檢視結果。如需檢視結果的資訊，請參閱 [在 CloudWatch 中檢視指標資料的圖表](metric-attribution-results-cloudwatch.md)。如需將結果發佈至 Amazon S3 的資訊，請參閱 [將指標屬性報告發佈至 Amazon S3](metric-attribution-results-s3.md)。

## 建立指標屬性 (AWS CLI)
<a name="create-metric-attribution-cli"></a>

 下列程式碼說明如何使用 建立指標屬性 AWS Command Line Interface。您指定的角色必須具有 CloudWatch 的`PutMetricData`許可，如果發佈至 Amazon S3，則為 Amazon S3 儲存貯體的`PutObject`許可。若要使用您在 中建立的角色[為 Amazon Personalize 建立 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)，您可能需要為 CloudWatch 和 Amazon S3 新增政策。如需政策範例，請參閱 [授予 Amazon Personalize 對 CloudWatch 的存取權](metric-attribution-requirements.md#metric-attribution-cw-permissions)和 [讓 Amazon Personalize 存取您的 Amazon S3 儲存貯體](metric-attribution-requirements.md#metric-attribution-s3-permissions)。

 針對每個指標指定名稱、事件類型和表達式 （函數）。可用的函數包括 `SUM(DatasetType.COLUMN_NAME)`和 `SAMPLECOUNT()`。針對 SUM() 函數，指定資料集類型和資料欄名稱。例如 `SUM(Items.LENGTH)`。如需每個參數的資訊，請參閱 [CreateMetricAttribution](API_CreateMetricAttribution.md)。

```
aws personalize create-metric-attribution \
--name metric attribution name \
--dataset-group-arn dataset group arn \
--metrics-output-config "{\"roleArn\": \"Amazon Personalize service role ARN\", \"s3DataDestination\":{\"kmsKeyArn\":\"kms key ARN\",\"path\":\"s3://amzn-s3-demo-bucket/folder-name/\"}}" \
--metrics "[{
  \"eventType\": \"event type\",
  \"expression\": \"SUM(DatasetType.COLUMN_NAME)\",
  \"metricName\": \"metric name\"
}]"
```

## 建立指標屬性 (AWS SDKs)
<a name="create-metric-attribution-sdk"></a>

 下列程式碼說明如何使用適用於 Python 的 SDK (Boto3) 建立指標屬性。您指定的角色必須具有 CloudWatch 的`PutMetricData`許可，而且如果發佈至 Amazon S3，則為 Amazon S3 儲存貯體的`PutObject`許可。若要使用您在 中建立的角色[為 Amazon Personalize 建立 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)，您可能需要為 CloudWatch 和 Amazon S3 新增政策。如需政策範例，請參閱 [授予 Amazon Personalize 對 CloudWatch 的存取權](metric-attribution-requirements.md#metric-attribution-cw-permissions)和 [讓 Amazon Personalize 存取您的 Amazon S3 儲存貯體](metric-attribution-requirements.md#metric-attribution-s3-permissions)。

 針對每個指標指定名稱、事件類型和表達式 （函數）。可用的函數包括 `SUM(DatasetType.COLUMN_NAME)`和 `SAMPLECOUNT()`。針對 SUM() 函數，指定資料集類型和資料欄名稱。例如 `SUM(Items.LENGTH)`。如需每個參數的資訊，請參閱 [CreateMetricAttribution](API_CreateMetricAttribution.md)。

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize = boto3.client('personalize')

metricsList = [{ 
      "eventType": "event type",
      "expression": "SUM(DatasetType.COLUMN_NAME)",
      "metricName": "metric name"
}]

outputConfig = {
  "roleArn": "Amazon Personalize service role ARN", 
  "s3DataDestination": {
    "kmsKeyArn": "key ARN", 
    "path": "s3://amzn-s3-demo-bucket/<folder>"
  }
}
response = personalize.create_metric_attribution(
  name = 'metric attribution name',
  datasetGroupArn = 'dataset group arn',
  metricsOutputConfig = outputConfig,
  metrics = metricsList
)

metric_attribution_arn = response['metricAttributionArn']

print ('Metric attribution ARN: ' + metric_attribution_arn)

description = personalize.describe_metric_attribution(
    metricAttributionArn = metric_attribution_arn)['metricAttribution']

print('Name: ' + description['name'])
print('ARN: ' + description['metricAttributionArn'])
print('Status: ' + description['status'])
```

------
#### [ SDK for Java 2.x ]

```
public static String createMetricAttribution(PersonalizeClient personalizeClient,
                                             String eventType,
                                             String expression,
                                             String metricName,
                                             String metricAttributionName,
                                             String roleArn,
                                             String s3Path,
                                             String kmsKeyArn,
                                             String datasetGroupArn) {
    String metricAttributionArn = "";

    try {

        MetricAttribute attribute = MetricAttribute.builder()
                .eventType(eventType)
                .expression(expression)
                .metricName(metricName)
                .build();

        ArrayList<MetricAttribute> metricAttributes = new ArrayList<>();
        metricAttributes.add(attribute);

        S3DataConfig s3DataDestination = S3DataConfig.builder()
                .kmsKeyArn(kmsKeyArn)
                .path(s3Path)
                .build();

        MetricAttributionOutput outputConfig = MetricAttributionOutput.builder()
                .roleArn(roleArn)
                .s3DataDestination(s3DataDestination)
                .build();

        CreateMetricAttributionRequest createMetricAttributionRequest = CreateMetricAttributionRequest.builder()
                .name(metricAttributionName)
                .datasetGroupArn(datasetGroupArn)
                .metrics(metricAttributes)
                .metricsOutputConfig(outputConfig)
                .build();
        CreateMetricAttributionResponse createMetricAttributionResponse = personalizeClient.createMetricAttribution(createMetricAttributionRequest);

        metricAttributionArn = createMetricAttributionResponse.metricAttributionArn();
        System.out.println("Metric attribution ARN: " + metricAttributionArn);
        return metricAttributionArn;
    } catch (PersonalizeException e) {
        System.out.println(e.awsErrorDetails().errorMessage());
    }
    return "";
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients and commands using ES6 syntax.
import { CreateMetricAttributionCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";
  
// create personalizeClient
const personalizeClient = new PersonalizeClient({
  region: "REGION"
});

// set the metric attribution param
export const createMetricAttributionParam = {
  name: "METRIC_ATTRIBUTION_NAME",            /* required */
  datasetGroupArn: "DATASET_GROUP_ARN",       /* required */
  metricsOutputConfig: {
    roleArn: "ROLE_ARN",                      /* required */
    s3DataDestination: {                
      kmsKeyArn: "KEY_ARN",                                                      /* optional */
      path: "s3://amzn-s3-demo-bucket/<folderName>/",    /* optional */
    },
  },
  metrics: [                        
    {
      eventType: "EVENT_TYPE",                      /* required for each metric */
      expression: "SUM(DatasetType.COLUMN_NAME)",   /* required for each metric */
      metricName: "METRIC_NAME",                    /* required for each metric */
    }
  ]
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new CreateMetricAttributionCommand(createMetricAttributionParam)
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------