

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

# 使用数据集
<a name="working-with-datasets"></a>

数据集是 Quick Sight 分析的基础，可作为准备好的结构化数据源，为您的分析和仪表板提供支持。从数据源创建数据集后，您需要在数据的整个生命周期中对其进行有效管理，以确保可靠、安全的协作分析。

本节介绍完整的数据集管理工作流程，从编辑和版本控制数据集到与团队成员共享数据集和实施安全控制。您将学习如何在支持协作分析的同时保持数据集的完整性，跟踪哪些分析依赖于您的数据集，以及如何实施行级和列级安全以保护敏感信息。无论您是在准备供团队使用的数据集、对分析问题进行故障排除，还是实施数据治理策略，这些主题都提供了在 Quick Sight 中进行有效数据集管理的基本知识。

**Topics**
+ [创建数据集](creating-data-sets.md)
+ [编辑数据集](edit-a-data-set.md)
+ [将数据集恢复到先前发布的版本](dataset-versioning.md)
+ [复制数据集](duplicate-a-data-set.md)
+ [共享数据集](sharing-data-sets.md)
+ [跟踪使用数据集的控制面板和分析](track-analytics-that-use-dataset.md)
+ [在 Amazon Quick 中使用数据集参数](dataset-parameters.md)
+ [在 Amazon Quick 中使用行级安全](row-level-security.md)
+ [使用列级别安全性限制对数据集的访问](restrict-access-to-a-data-set-using-column-level-security.md)
+ [在 Amazon Quick 中以 IAM 角色身份运行查询](datasource-run-as-role.md)
+ [删除数据集](delete-a-data-set.md)
+ [向分析中添加数据集](adding-a-data-set-to-an-analysis.md)

# 创建数据集
<a name="creating-data-sets"></a>

 您可以在 Amazon Quick 中使用新的或现有的数据源创建数据集。您可以使用各种数据库数据源向 Amazon Quick 提供数据。这包括 Amazon RDS 实例和 Amazon Redshift 集群。这还包括您的组织、Amazon EC2 或类似环境中的 MariaDB、Microsoft SQL Server、MySQL、Oracle 和 PostgreSQL 实例。

**Topics**
+ [使用新数据来源创建数据集](creating-data-sets-new.md)
+ [使用现有的数据来源创建数据集](create-a-data-set-existing.md)
+ [使用 Amazon Quick 中的现有数据集创建数据集](create-a-dataset-existing-dataset.md)

# 使用新数据来源创建数据集
<a name="creating-data-sets-new"></a>

当您基于诸如 Amazon RDS、Amazon Redshift 或 Amazon EC2 之类的 AWS 服务创建数据集时，使用来自该来源的数据时可能会收取数据传输费用。这些费用也可能有所不同，具体取决于该 AWS 资源是否位于您为Amazon Quick账户选择的家庭 AWS 区域 中。有关定价的详细信息，请参阅所用服务的定价页面。

在创建新的数据库数据集时，您可以选择一个表、联接多个表或创建 SQL 查询来检索您想要的数据。您也可以更改数据集是使用直接查询还是在 [SPICE](spice.md) 中存储数据。

**创建新的数据集**

1. 要创建数据集，请在 “**数据” 页面上选择 “新建**数据**集**”。然后，您可以基于现有数据集或数据来源创建数据集，或连接到新数据来源并使数据集基于该数据来源。

1. 向数据来源提供连接信息：
   + 对于本地的文本或 Microsoft Excel 文件，只需标识文件位置并上传文件。
   + 对于 Amazon S3，您需要提供一个清单，以指定要使用的文件或存储桶以及目标文件的导入设置。
   + 对于亚马逊 Athena，系统会返回您账户中的所有 Athena 数据库。 AWS 不需要额外凭证。
   + 对于 Salesforce，需要提供用于连接的凭证。
   + 对于 Amazon Redshift、Amazon RDS、Amazon EC2 或其他数据库数据来源，需要提供有关托管数据的服务器和数据库的信息。还要为该数据库实例提供有效的凭证。

# 使用数据库创建数据集
<a name="create-a-database-data-set"></a>

以下过程演示了如何连接到数据库数据来源和创建数据集。要使用您的 Amazon Quick 账户自动发现 AWS 的数据源创建数据集，请使用[使用自动发现的 Amazon Redshift 集群或 Amazon RDS 实例创建数据集](#create-a-data-set-autodiscovered)。要使用任何其他数据库数据来源创建数据集，请使用 [使用非自动发现的数据库创建数据集](#create-a-data-set-database)。

## 使用自动发现的 Amazon Redshift 集群或 Amazon RDS 实例创建数据集
<a name="create-a-data-set-autodiscovered"></a>

使用以下过程创建指向自动发现的 AWS 数据来源的连接。

**创建与自动发现 AWS 的数据源的连接**

1. 选中 [数据来源限额](data-source-limits.md) 以确保您的目标表或查询不超出数据来源限制。

1. 确认您计划使用的数据库凭证具有[所需的权限](required-permissions.md)中所述的相应权限。

1. 按照中的说明，确保您已将集群或实例配置为 Amazon Quick 访问权限[网络和数据库配置要求](configure-access.md)。

1. 在 Amazon 快速入门页面上，选择**数据**。

1. 选择 “**创建**”，然后选择 “**新建数据集**”。

1. 根据要连接的 AWS 服务，选择 **RDS 或 R** **edshift 自动发现**图标。

1. 输入数据源的连接信息，如下所示：
   + 对于**数据来源名称**，输入数据来源的名称。
   + 对于 **Instance ID (实例 ID)**，选择要连接到的实例或集群的名称。
   + **Database name** 会显示 **Instance ID** 集群或实例的默认数据库。要在该集群或实例上使用不同的数据库，请输入其名称。
   + 对于 **UserName**，请输入有权执行以下操作的用户帐户的用户名：
     + 访问目标数据库。
     + 在该数据库中读取要使用的任何表（对其执行 `SELECT` 语句）。
   + 对于**密码**，输入您输入的账户的密码。

1. 选择 **Validate connection** 验证您的连接信息是否正确。

1. 如果连接验证成功，请选择 **Create data source**。如果未成功，则更正连接信息，然后重新验证。
**注意**  
Amazon Quick 使用安全套接字层 (SSL) 自动保护与亚马逊 RDS 实例和 Amazon Redshift 集群的连接。您无需执行任何操作来启用这一功能。

1. 选择下列选项之一：
   + **自定义 SQL**

     在下一个屏幕上，您可以选择使用 **Use custom SQL（使用自定义 SQL）**选项写入查询。这样做将打开一个名为 **Enter custom SQL query (输入自定义 SQL 查询)** 的屏幕，您可以在其中输入查询的名称，然后输入 SQL。为获得最佳结构，请在 SQL 编辑器中构成查询，然后将其粘贴到此窗口中。在命名和输入查询后，您可以选择 **Edit/Preview data（编辑/预览数据）**或 **Confirm query（确认查询）**。立即选择 **Edit/Preview data（编辑/预览数据）**以转到数据准备。选择 **Confirm query（确认查询）**以验证 SQL 并确保没有错误。
   + **选择表**

     要连接到特定表，对于**架构：包含表组**，请选择**选择**，然后选择一个架构。有时数据库只有一个架构，此情况下会自动选择该架构，不显示架构选择选项。

     要在创建分析前准备数据，请选择 **Edit/Preview data** 打开数据准备。如果要联接到更多表，请使用此选项。

     否则，在选择表后，请选择 **Select（选择）**。

1. 请选择以下选项之一：
   + 在创建分析之前准备数据。为此，选择 **Edit/Preview data (编辑/预览数据)** 以打开选定表的数据准备屏幕。有关数据准备的更多信息，请参阅[准备数据集示例](preparing-data-sets.md)。
   + 按原样使用表数据创建一个数据集和分析，并将数据集数据导入到 SPICE 以提高性能（建议）。为此，请检查表大小和 SPICE 指示器以确定您是否具有足够的容量。

     如果有足够的 SPICE 容量，请选择**导入到 SPICE 以加快分析**，然后选择**可视化**创建分析。
**注意**  
如果您希望使用 SPICE 但没有足够的空间，请选择**编辑/预览数据**。在数据准备过程中，您可以从数据集中删除字段以缩减其大小。您也可以应用筛选条件或编写 SQL 查询以减少返回的行或列数。有关数据准备的更多信息，请参阅[准备数据集示例](preparing-data-sets.md)。
   + 要按原样使用表数据创建一个数据集和分析，并直接从数据库中查询数据，请选择**直接查询数据**选项。然后，选择 **Visualize (可视化)** 以创建分析。

## 使用非自动发现的数据库创建数据集
<a name="create-a-data-set-database"></a>

使用以下过程创建指向自动发现的 Amazon Redshift 集群或 Amazon RDS 实例以外的任何数据库连接。此类数据库包括位于不同账户 AWS 区域 或与不同账户关联的 Amazon Redshift 集群和 Amazon RDS 实例。 AWS 它们还包括位于本地、Amazon EC2 或某种其他可访问的环境中的 MariaDB、Microsoft SQL Server、MySQL、Oracle 和 PostgreSQL 实例。

**创建与不是自动发现的 Amazon Redshift 集群或 RDS 实例的数据库连接**

1. 选中 [数据来源限额](data-source-limits.md) 以确保您的目标表或查询不超出数据来源限制。

1. 确认您计划使用的数据库凭证具有[所需的权限](required-permissions.md)中所述的相应权限。

1. 按照中的说明，确保您已将集群或实例配置为 Amazon Quick 访问权限[网络和数据库配置要求](configure-access.md)。

1. 在 Amazon 快速入门页面上，选择**管理数据**。

1. 选择 “**创建**”，然后选择 “**新建数据组”**。

1. 如果您想**连接到其他账户中的 Amazon Redshift 集群或 AWS 区域 与其他账户关联的 Amazon Redshift 集群，请选择 Redshift 手动**连接图标。 AWS 或者，选择相应的数据库管理系统图标以连接到 Amazon Aurora、MariaDB、Microsoft SQL Server、MySQL Oracle 或 PostgreSQL 实例。

1. 输入数据源的连接信息，如下所示：
   + 对于**数据来源名称**，输入数据来源的名称。
   + 对于 **Database server (数据库服务器)**，输入以下值之一：
     + 对于 Amazon Redshift 集群或 Amazon RDS 实例，输入该集群或实例的端点（不带端口号）。例如，如果终端节点值为 `clustername.1234abcd.us-west-2.redshift.amazonaws.com:1234`，则输入 `clustername.1234abcd.us-west-2.redshift.amazonaws.com`。您可以从 AWS 控制台集群或实例详细信息页面上的**终端节点**字段中获取终端节点值。
     + 对于 MariaDB、Microsoft SQL Server、MySQL、Oracle 或 PostgreSQL 的 Amazon EC2 实例，输入公有 DNS 地址。在 Amazon EC2 控制台中，您可以在实例详细信息窗格中的**公有 DNS** 字段中获取公有 DNS 值。
     + 对于 MariaDB、Microsoft SQL Server、MySQL、Oracle 或 PostgreSQL 的非 Amazon EC2 实例，输入数据库服务器的主机名或公有 IP 地址。如果您使用安全套接字层 (SSL) 来进行安全连接 (推荐)，则可能需要提供主机名以匹配 SSL 证书所需的信息。有关接受的证书的列表，请参阅[Amazon 快速 SSL 和 CA 证书](configure-access.md#ca-certificates)。
   + 对于 **Port (端口)**，输入集群或实例在连接上使用的端口。
   + 对于 **Database name (数据库名称)**，输入要使用的数据库的名称。
   + 对于 **UserName**，请输入有权执行以下操作的用户帐户的用户名：
     + 访问目标数据库。
     + 在该数据库中读取要使用的任何表（对其执行 `SELECT` 语句）。
   + 对于**密码**，输入与您输入的账户关联的密码。

1. （可选）如果要连接到 Amazon Redshift 集群以外的任何集群或实例，并且*不想*使用安全连接，请确保清除**启用 SSL**。*我们强烈建议您将该选项保持选中状态*，因为不安全的连接可能会遭到篡改。

   有关目标实例如何使用 SSL 保护连接的更多信息，请参阅目标数据库管理系统的文档。Amazon Quick 不接受自签名 SSL 证书为有效证书。有关接受的证书的列表，请参阅[Amazon 快速 SSL 和 CA 证书](configure-access.md#ca-certificates)。

   Amazon Quick 使用 SSL 自动保护与亚马逊 Redshift 集群的连接。您无需执行任何操作来启用这一功能。

   某些数据库，例如 Presto 和 Apache Spark，必须满足其他要求才能连接 Amazon Quick。有关更多信息，请参阅[使用 Presto 创建数据来源](create-a-data-source-presto.md)、或[使用 Apache Spark 创建数据来源](create-a-data-source-spark.md)。

1. (可选) 选择 **Validate connection** 验证您的连接信息是否正确。

1. 如果连接验证成功，请选择 **Create data source**。如果未成功，则更正连接信息，然后重新验证。

1. 选择下列选项之一：
   + **自定义 SQL**

     在下一个屏幕上，您可以选择使用 **Use custom SQL（使用自定义 SQL）**选项写入查询。这样做将打开一个名为 **Enter custom SQL query (输入自定义 SQL 查询)** 的屏幕，您可以在其中输入查询的名称，然后输入 SQL。为获得最佳结构，请在 SQL 编辑器中构成查询，然后将其粘贴到此窗口中。在命名和输入查询后，您可以选择 **Edit/Preview data（编辑/预览数据）**或 **Confirm query（确认查询）**。立即选择 **Edit/Preview data（编辑/预览数据）**以转到数据准备。选择 **Confirm query（确认查询）**以验证 SQL 并确保没有错误。
   + **选择表**

     要连接到特定表，对于**架构：包含表组**，请选择**选择**，然后选择一个架构。有时数据库只有一个架构，此情况下会自动选择该架构，不显示架构选择选项。

     要在创建分析前准备数据，请选择 **Edit/Preview data** 打开数据准备。如果要联接到更多表，请使用此选项。

     否则，在选择表后，请选择 **Select（选择）**。

1. 请选择以下选项之一：
   + 在创建分析之前准备数据。为此，选择 **Edit/Preview data (编辑/预览数据)** 以打开选定表的数据准备屏幕。有关数据准备的更多信息，请参阅[准备数据集示例](preparing-data-sets.md)。
   + 按原样使用表数据创建一个数据集和分析，并将数据集数据导入到 SPICE 以提高性能（建议）。为此，请检查表大小和 SPICE 指示器以确定您是否具有足够的空间。

     如果有足够的 SPICE 容量，请选择**导入到 SPICE 以加快分析**，然后选择**可视化**创建分析。
**注意**  
如果您希望使用 SPICE 但没有足够的空间，请选择**编辑/预览数据**。在数据准备过程中，您可以从数据集中删除字段以缩减其大小。您也可以应用筛选条件或编写 SQL 查询以减少返回的行或列数。有关数据准备的更多信息，请参阅[准备数据集示例](preparing-data-sets.md)。
   + 按原样使用表数据创建一个数据集和分析，并直接从数据库中查询数据。为此，请选择 **Directly query your data (直接查询数据)** 选项。然后，选择 **Visualize (可视化)** 以创建分析。

# 使用现有的数据来源创建数据集
<a name="create-a-data-set-existing"></a>

在您与 Salesforce、 AWS 数据存储或其他数据库数据源建立初始连接后，Amazon Quick 会保存连接信息。它将数据来源添加到**创建数据集**页面的**使用现有的数据来源**部分。您可以使用这些现有的数据来源创建新数据集，无需重新指定连接信息。

## 使用现有的 Amazon S3 数据来源创建数据集
<a name="create-a-data-set-existing-s3"></a>

使用以下过程通过现有的 Amazon S3 数据来源创建数据集。

**使用现有的 S3 数据来源创建数据集**

1. 在 Amazon 快速入门页面上，选择**数据**。

1. 选择 “**创建**”，然后选择 “**新建数据集**”。

1. 选择要使用的 Amazon S3 数据源。

1. 要在创建数据集之前准备数据，请选择**编辑/预览数据**。要按原样使用数据创建分析，请选择 **Visualize (可视化)**。

## 使用现有的 Amazon Athena 数据来源创建数据集
<a name="create-a-data-set-existing-athena"></a>

要使用现有的 Amazon Athena 数据来源创建数据集，请按以下步骤操作。

**使用现有的 Athena 连接配置文件创建数据集**

1. 在 Amazon 快速入门页面上，选择**数据**。

1. 选择 “**创建**”，然后选择 “**新建数据组”**。

   为要使用的现有数据源选择连接配置文件图标。连接配置文件标有数据来源图标和创建该连接的人员提供的名称。

1. 选择**创建数据集**。

   Amazon Quick 仅根据 Athena 工作组为该数据源创建连接配置文件。数据库和表未保存。

1. 在**选择您的表**屏幕上，执行以下操作之一：
   + 要编写 SQL 查询，请选择**使用自定义 SQL**。
   + 要选择数据库和表，请先从**数据库**列表中选择您的数据库。接下来，从为数据库显示的列表中选择一个表。

## 使用现有的 Salesforce 数据来源创建数据集
<a name="create-a-data-set-existing-salesforce"></a>

使用以下过程通过现有的 Salesforce 数据来源创建数据集。

**使用现有的 Salesforce 数据来源创建数据集**

1. 在 Amazon 快速入门页面上，选择**数据**。

1. 选择 “**创建**”，然后选择 “**新建数据组”**。

1. 选择要使用的 Salesforce 数据源。

1. 选择 **Create Data Set**。

1. 选择下列选项之一：
   + **自定义 SQL**

     在下一个屏幕上，您可以选择使用 **Use custom SQL（使用自定义 SQL）**选项写入查询。这样做将打开一个名为 **Enter custom SQL query (输入自定义 SQL 查询)** 的屏幕，您可以在其中输入查询的名称，然后输入 SQL。为获得最佳结构，请在 SQL 编辑器中构成查询，然后将其粘贴到此窗口中。在命名和输入查询后，您可以选择 **Edit/Preview data（编辑/预览数据）**或 **Confirm query（确认查询）**。立即选择 **Edit/Preview data（编辑/预览数据）**以转到数据准备。选择 **Confirm query（确认查询）**以验证 SQL 并确保没有错误。
   + **选择表**

     要连接到特定表，在**数据元素：包含您的数据**中，请选择**选择**，然后选择**报告**或**对象**。

     要在创建分析前准备数据，请选择 **Edit/Preview data** 打开数据准备。如果要联接到更多表，请使用此选项。

     否则，在选择表后，请选择 **Select（选择）**。

1. 在下一个屏幕上，选择以下选项之一：
   + 要原样使用数据创建数据集和分析，请选择**可视化**。
**注意**  
如果没有足够的 [SPICE](spice.md) 容量，请选择 **Edit/Preview data** (编辑/预览数据)。在数据准备期间，您可以从数据集中删除字段以缩减其大小，也可以应用筛选条件减少返回的行数。有关数据准备的更多信息，请参阅[准备数据集示例](preparing-data-sets.md)。
   + 要在创建分析前准备数据，请选择 **Edit/Preview data** 打开所选报告或对象的数据准备。有关数据准备的更多信息，请参阅[准备数据集示例](preparing-data-sets.md)。

## 使用现有的数据库数据来源创建数据集
<a name="create-a-data-set-existing-database"></a>

使用以下过程通过现有的数据库数据来源创建数据集。

**使用现有的数据库数据来源创建数据集**

1. 在 Amazon 快速入门页面上，选择**数据**。

1. 选择 “**创建**”，然后选择 “**新建数据组”**。

1. 选择要使用的数据库数据源，然后选择 “**创建数据集**”。

1. 选择下列选项之一：
   + **自定义 SQL**

     在下一个屏幕上，您可以选择使用 **Use custom SQL（使用自定义 SQL）**选项写入查询。这样做将打开一个名为 **Enter custom SQL query (输入自定义 SQL 查询)** 的屏幕，您可以在其中输入查询的名称，然后输入 SQL。为获得最佳结构，请在 SQL 编辑器中构成查询，然后将其粘贴到此窗口中。在命名和输入查询后，您可以选择 **Edit/Preview data（编辑/预览数据）**或 **Confirm query（确认查询）**。立即选择 **Edit/Preview data（编辑/预览数据）**以转到数据准备。选择 **Confirm query（确认查询）**以验证 SQL 并确保没有错误。
   + **选择表**

     要连接到特定表，对于**架构：包含表组**，请选择**选择**，然后选择一个架构。有时数据库只有一个架构，此情况下会自动选择该架构，不显示架构选择选项。

     要在创建分析前准备数据，请选择 **Edit/Preview data** 打开数据准备。如果要联接到更多表，请使用此选项。

     否则，在选择表后，请选择 **Select（选择）**。

1. 请选择以下选项之一：
   + 在创建分析之前准备数据。为此，选择 **Edit/Preview data (编辑/预览数据)** 以打开选定表的数据准备屏幕。有关数据准备的更多信息，请参阅[准备数据集示例](preparing-data-sets.md)。
   + 按原样使用表数据创建一个数据集和分析，并将数据集数据导入到 [SPICE](spice.md) 以提高性能（建议）。为此，请检查 SPICE 指示器以确定您是否具有足够的空间。

     如果有足够的 SPICE 容量，请选择**导入到 SPICE 以加快分析**，然后选择**可视化**创建分析。
**注意**  
如果您希望使用 SPICE 但没有足够的空间，请选择**编辑/预览数据**。在数据准备过程中，您可以从数据集中删除字段以缩减其大小。您也可以应用筛选条件或编写 SQL 查询以减少返回的行或列数。有关数据准备的更多信息，请参阅[准备数据集示例](preparing-data-sets.md)。
   + 按原样使用表数据创建一个数据集和分析，并直接从数据库中查询数据。为此，请选择 **Directly query your data (直接查询数据)** 选项。然后，选择 **Visualize (可视化)** 以创建分析。

# 使用 Amazon Quick 中的现有数据集创建数据集
<a name="create-a-dataset-existing-dataset"></a>

在 Amazon Quick 中创建数据集后，您可以将其用作源来创建其他数据集。执行此操作时，将保留父数据集包含的所有数据准备，例如任何联接或计算字段。您可以为新子数据集中的数据添加额外的准备工作，例如加入新数据和筛选数据。您还可以为子数据集设置自己的数据刷新计划，并跟踪使用此数据集的控制面板和分析。

使用具有活动 RLS 规则的数据集作为源创建的子数据集将继承父数据集的 RLS 规则。使用较大的父数据集创建子数据集的用户只能看到他们在父数据集中有权访问的数据。然后，除了继承的 RLS 规则外，您还可以向新的子数据集添加更多 RLS 规则，以进一步管理谁可以访问新数据集中的数据。您只能使用直接查询中具有活动 RLS 规则的数据集创建子数据集。

从现有的 Quick 数据集创建数据集具有以下优点：
+ **集中管理数据集** – 数据工程师可以轻松扩展以满足组织内多个团队的需求。为此，他们可以开发和维护一些描述组织主要数据模型的通用数据集。
+ **减少数据源管理** — 业务分析师 (BAs) 通常会花费大量时间和精力请求访问数据库、管理数据库凭据、查找正确的表以及管理快速数据刷新计划。从现有数据集构建新的数据集意味着 BAs 不必从头开始使用数据库中的原始数据。他们可以使用精选数据。
+ **预定义的关键指标** – 通过使用现有的数据集创建数据集，数据工程师可以集中定义和维护公司众多组织的关键数据定义。例如销售增长和净边际收益。借助此功能，数据工程师还可以分发对这些定义的更改。这种方法意味着他们的业务分析师可以更快、更可靠地可视化正确数据。
+ **灵活地自定义数据** – 通过使用现有的数据集创建数据集，业务分析师可以更灵活地根据自己的业务需求自定义数据集。他们不必担心会中断其他团队的数据。

例如，假设您是由五名数据工程师组成的电子商务中心团队的一员。您和团队可以访问数据库中的销售、订单、取消和退货数据。您已通过架构连接其他 18 个维度表，从而创建了一个快速数据集。团队创建的关键指标是计算字段，即订单产品销售额（OPS）。它的定义是：OPS = 产品数量 x 价格。

团队为 8 个国家/地区的 10 个不同团队的 100 多位业务分析师提供服务。这些团队分别为优惠券团队、出站营销团队、移动平台团队和推荐团队。所有这些团队都以 OPS 指标为基础来分析自己的业务线。

您的团队无需手动创建和维护数百个未连接的数据集，而是重用数据集为整个组织的团队创建多个等级的数据集。这样做可以集中管理数据，并允许每个团队根据自己的需求自定义数据。同时，这会同步对数据的更新（例如指标定义更新），并维护行级和列级的安全性。例如，组织中的各个团队可以使用集中式数据集。然后，他们可以将这些数据集与特定于其团队的数据相结合，创建新的数据集并在此基础上构建分析。

除了使用关键的 OPS 指标外，组织中的其他团队还可以重用您创建的集中式数据集中的列元数据。例如，数据工程团队可以在集中式数据集中定义元数据，例如*名称*、*描述*、*数据类型*和*文件夹*。所有后续团队都可以使用此数据集。

**注意**  
Amazon Quick 支持使用单个数据集创建最多两个额外级别的数据集。  
例如，您可以使用父数据集创建子数据集，然后创建孙子数据集，总共三个数据集等级。

## 使用现有的数据集创建数据集
<a name="create-a-dataset-existing-dataset-how-to"></a>

使用以下过程通过现有的数据集创建数据集。

**使用现有的数据集创建数据集**

1. 在快速入门页面中，选择左侧窗格中的**数据**。

1. 选择**创建**，然后选择要用于创建新数据集的数据集。

1. 在为该数据集打开的页面上，选择**在分析中使用**的下拉菜单，然后选择**在数据集中使用**。

   数据准备页面将打开并预加载父数据集中的所有内容，包括计算字段、联接和安全设置。

1. 在打开的数据准备页面上，在左下角的**查询模式**中，选择您想要数据集从原始父数据集中提取更改和更新的方式。可以选择以下选项：
   + **直接查询** – 这是默认查询模式。如果选择此选项，则打开关联的数据集、分析或控制面板时，会自动刷新此数据集的数据。但是，以下限制适用：
     + 如果父数据集允许直接查询，则可以在子数据集中使用直接查询模式。
     + 如果联接中有多个父数据集，则只有当所有父数据集都来自同一个底层数据来源时，才可以为子数据集选择直接查询模式。例如，相同的 Amazon Redshift 连接。
     + 支持单个 SPICE 父数据集直接查询。不支持联接中的多个 SPICE 父数据集直接查询。
   + **SPICE** – 如果选择此选项，则可以为新数据集设置与父数据集同步的计划。有关为数据集创建 SPICE 刷新计划的更多信息，请参阅 [刷新 SPICE 数据](refreshing-imported-data.md)。

1. （可选）准备数据以供分析。有关数据准备的更多信息，请参阅 [使用 Amazon Quick Sight 准备数据](preparing-data.md)。

1. （可选）设置行级或列级安全性（RLS/CLS）以限制对数据集的访问。有关设置 RLS 的更多信息，请参阅 [使用采用基于用户的规则的行级别安全性限制对数据集的访问使用基于用户的规则](restrict-access-to-a-data-set-using-row-level-security.md)。有关设置 CLS 的更多信息，请参阅 [使用列级别安全性限制对数据集的访问](restrict-access-to-a-data-set-using-column-level-security.md)。
**注意**  
您只能 RLS/CLS 在子数据集上进行设置。 RLS/CLS 不支持在父数据集上。

1. 完成后，选择**保存并发布**以保存更改并发布新的子数据集。或者选择**发布并可视化**以发布新的子数据集并开始可视化数据。

# 限制其他人使用您的数据集创建新数据集
<a name="restrict-create-dataset"></a>

在 Amazon Quick 中创建数据集时，可以防止其他人将其用作其他数据集的来源。您可以指定其他人是否可以用其创建任何数据集。或者，您可以指定其他人可以或不能使用您的数据集创建的数据集类型，例如直接查询数据集或 SPICE 数据集。

使用以下过程了解如何限制其他人使用您的数据集创建新数据集。

**限制其他人使用您的数据集创建新数据集**

1. 在快速入门页面中，选择左侧窗格中的**数据**。

1. 选择 “**创建**”，然后选择要限制从中创建新数据集的数据集。

1. 在为该数据集打开的页面上，选择**编辑数据集**。

1. 在打开的数据准备页面上，选择右上角的**管理**，然后选择**属性**。

1. 在打开的**数据集属性**窗格中，从以下选项中进行选择：
   + 要限制任何人使用此数据集创建任何类型的新数据集，请关闭**允许使用此数据集创建新数据集**。

     允许创建新数据集时，切换按钮为蓝色。不允许创建新数据集时，其显示为灰色。
   + 要限制其他人创建直接查询数据集，请清除**允许直接查询**。
   + 要限制其他人创建数据集的 SPICE 副本，请清除**允许 SPICE 副本**。

     有关 SPICE 数据集的更多信息，请参阅 [将数据导入到 SPICE](spice.md)。

1. 关闭窗格。

# 编辑数据集
<a name="edit-a-data-set"></a>

您可以编辑现有数据集以执行数据准备。有关 Quick Sight 数据准备功能的更多信息，请参阅[使用 Amazon Quick Sight 准备数据](preparing-data.md)。

您可以从**数据集**页面或分析页面打开数据集进行编辑。从任一位置编辑数据集都会修改使用该数据集的所有分析的数据集。

## 编辑数据集时要考虑的事项
<a name="change-a-data-set"></a>

在这两种情况下，对数据集进行更改可能会导致出现问题。一种是有意编辑数据集。另一种是数据来源的更改过大，以至于对分析造成影响。

**重要**  
在生产环境中使用的分析应受到保护，以便其继续正常发挥作用。

在处理数据更改时，我们建议您执行以下操作：
+ 记录您的数据来源和数据集以及依赖它们的视觉对象。记录应包括屏幕截图、使用的字段、字段井中的位置、筛选条件、排序、计算、颜色和格式等。请记录重新创建视觉对象所需的所有内容。您还可以在数据集管理选项中跟踪哪些 Quick Sight 资源使用数据集。有关更多信息，请参阅 [跟踪使用数据集的控制面板和分析](track-analytics-that-use-dataset.md)。
+ 编辑数据集时，尽量不要进行可能破坏现有视觉对象的更改。例如，不要删除视觉对象中正在使用的列。如果您必须删除某个列，请在其位置上创建一个计算列。替换列应与原始列具有相同的名称和数据类型。
+ 如果在源数据库中更改数据来源或数据集，请调整视觉对象以适应更改，如前所述。或者，您可以尝试调整源数据库。例如，您可以创建源表 (文档) 的视图。以后，如果该表发生变化，您可以调整视图以包括或排除列 (属性)，更改数据类型，填写 null 值，等等。或者，在另一种情况下，如果您的数据集基于缓慢的 SQL 查询，您可以创建一个表以保存查询结果。

  如果您无法充分调整数据来源，请根据分析文档重新创建视觉对象。
+ 如果您无法再访问数据来源，基于该数据来源的分析将为空。您创建的视觉对象仍然存在，但无法显示这些对象，直到它们具有可显示的数据。如果您的管理员更改了权限，则可能会出现这种结果。
+ 如果您删除视觉对象所基于的数据集，您可能需要通过文档重新创建该对象。您可以编辑视觉对象并选择一个新的数据集与之配合使用。如果您需要始终使用新文件替换旧文件，请将数据存储在始终可用的位置中。例如，您可以将 .csv 文件存储在 Amazon S3 中，然后创建一个 S3 数据集以用于您的视觉对象。有关访问 S3 中存储的文件的更多信息，请参阅[使用 Amazon S3 文件创建数据集](create-a-data-set-s3.md)。

  或者，您可以将数据导入到一个表中，并使视觉对象基于查询。这样，数据结构就不会发生变化，即使其中包含的数据发生了变化。
+ 要集中管理数据，可以考虑创建通用的多用途数据集，其他人可以使用这些数据集来创建自己的数据集。有关更多信息，请参阅 [使用 Amazon Quick 中的现有数据集创建数据集](create-a-dataset-existing-dataset.md)。

## 从“数据集”页面编辑数据集
<a name="edit-a-data-set-data"></a>

1. 在快速入门页面中，选择左侧**的数据**。

1. 在打开**的数据**页面上，选择要编辑的数据集，然后选择右上角的**编辑数据集**。

   随即将打开数据准备页面。有关您可以对数据集进行的编辑类型的更多信息，请参阅 [使用 Amazon Quick Sight 准备数据](preparing-data.md)。

## 在分析中编辑数据集
<a name="edit-a-data-set-analysis"></a>

要从分析页面编辑数据集，请按照以下过程操作。

**从分析页面编辑数据集**

1. 在分析页面中，选择**字段列表**窗格顶部的铅笔图标。

1. 在打开的**此分析中的数据集**页面上，选择要编辑的数据集右侧的三个点，然后选择**编辑**。

   随即将在数据准备页面中打开数据集。有关您可以对数据集进行的编辑类型的更多信息，请参阅 [使用 Amazon Quick Sight 准备数据](preparing-data.md)。

# 将数据集恢复到先前发布的版本
<a name="dataset-versioning"></a>

当您在 Amazon Quick Sight 中保存和发布对数据集的更改时，即会创建该数据集的新版本。您可以随时查看该数据集所有先前发布的版本列表。如果需要，您还可以预览该历史记录中的特定版本，甚至可以将数据集恢复到先前的版本。

以下限制适用于数据集版本控制：
+ 发布历史中仅显示数据集的最新 1,000 个版本，并且可以进行版本控制。
+ 超过 1,000 个已发布版本后，将自动从发布历史记录中删除最旧的版本，并且数据集无法再恢复到这些版本。

使用以下步骤将数据集恢复到先前发布的版本。

**将数据集恢复到先前发布的版本**

1. 在快速入门页面中，选择**数据**。

1. 在**数据**页面上，选择一个数据集，然后选择右上角的**编辑数据集**。

   有关编辑数据集的更多信息，请参阅 [编辑数据集](edit-a-data-set.md)。

1. 在打开的数据集准备页面上，选择右上角蓝色工具栏中的**管理**图标，然后选择**发布历史记录**。

   右侧显示了先前发布的版本列表。

1. 在**发布历史记录**窗格中，找到所需版本，然后选择**还原**。

   要在还原之前预览版本，请选择**预览**。

   数据集已恢复，并显示一条确认消息。**发布历史记录**窗格也会更新以显示数据集的活动版本。

## 排查恢复版本的问题
<a name="dataset-versioning-troubleshooting"></a>

有时，由于以下原因之一，数据集无法恢复到特定版本：
+ 数据集使用一个或多个已删除的数据来源。

  如果发生此错误，您无法将数据集恢复到先前的版本。
+ 恢复会使计算字段失效。

  如果出现此错误，您可以编辑或删除计算字段，然后保存数据集。此操作将创建数据集的新版本。
+ 数据来源中缺少一列或多列。

  如果发生此错误，Quick Sight 会在预览中显示来自数据源的最新架构，以协调版本之间的差异。架构预览中显示的任何计算字段、字段名称、字段类型和筛选条件更改均来自您要恢复到的版本。您可以将此协调后的架构保存为数据集的新版本。或者，您可以在发布历史记录的顶部（最新）版本上选择**预览**以返回至活动（最新）版本。

# 复制数据集
<a name="duplicate-a-data-set"></a>

您可以复制现有数据集以使用新名称保存该数据集的副本。新的数据集是一个完全独立的副本。

如果同时满足以下两个条件，则**复制数据集**选项可用：您拥有数据集并具有数据来源的权限。

**复制数据集**

1. 在快速入门页面中，选择左侧**的数据**。

1. 选择要复制的数据集。

1. 在打开的数据集详细信息页面上，选择**编辑数据集**的下拉列表，然后选择**复制**。

1. 在打开的“复制数据集”页面上，为复制的数据集命名，然后选择**复制**。

   随即将打开复制的数据集详细信息页面。在此页面中，您可以编辑数据集、设置刷新计划等。

# 共享数据集
<a name="sharing-data-sets"></a>

您可以通过与其他 Quick Sight 用户和群组共享数据集来授予他们访问该数据集的权限。之后，他们可以从中创建分析。如果您使其成为共有者，则他们也可以刷新、编辑、删除或共享数据集。

## 共享数据集
<a name="share-a-data-set"></a>

如果您拥有数据集的所有者权限，则可以使用以下步骤共享数据集。

**共享数据集**

1. 在快速入门页面中，选择左侧**的数据**。

1. 在**数据**页面上，选择要共享的数据集。

1. 在打开的数据集详细信息页面上，选择**权限**选项卡，然后选择**添加用户和组**。

1. 输入要与之共享该数据集的用户或组，然后选择**添加**。您只能邀请属于同一 Quick 账户的用户。

   重复该步骤，直到您输入了要与其共享数据集的每个人的信息。

1. 对于**权限**列，为每个用户或组选择一个角色，以授予他们对数据集的权限。

   选择**查看者**以允许用户使用该数据集创建分析和数据集。选择**所有者**以允许用户执行该操作，并允许用户刷新、编辑、删除和重新共享该数据集。

   用户会收到包含指向数据集的链接的电子邮件。组不会收到邀请电子邮件。

# 查看和编辑与之共享数据集的用户的权限
<a name="view-users-data-set"></a>

如果您拥有数据集的所有者权限，您可以使用以下过程查看、编辑或更改用户的 访问权限。

**查看、编辑或更改用户的数据集访问权限（前提是您拥有该数据集的所有者权限）**

1. 在快速入门页面中，选择左侧**的数据**。

1. 在**数据**页面上，选择要共享的数据集。

1. 在打开的数据集详细信息页面上，选择**权限**选项卡。

   此时会显示有权访问该数据集的所有用户和组的列表。

1. （可选）要更改用户或组的权限角色，请选择该用户或组的**权限**列中的下拉菜单。然后选择**查看者**或**所有者**。

# 撤销对数据集的访问权限
<a name="revoke-access-to-a-data-set"></a>

如果您拥有数据集的所有者权限，则可以使用以下过程撤销用户的数据集访问权限。

**撤销用户的数据集访问权限（前提是您拥有数据集的所有者权限）**

1. 在快速入门页面中，选择左侧**的数据**。

1. 在**数据**页面上，选择要共享的数据集。

1. 在打开的数据集详细信息页面上，选择**权限**选项卡。

   此时会显示有权访问该数据集的所有用户和组的列表。

1. 在用户或组的**操作**列，选择**撤销访问权限**。

# 跟踪使用数据集的控制面板和分析
<a name="track-analytics-that-use-dataset"></a>

在 Quick Sight 中创建数据集时，您可以跟踪哪些仪表板和分析使用该数据集。若想要查看在更改数据集或删除数据集时哪些资源会受到影响，这种方法非常有用。

使用以下过程查看哪些控制面板和分析使用数据集。

**跟踪使用数据集的资源**

1. 在快速入门页面中，选择左侧窗格中的**数据**。

1. 在**数据**页面上，选择要跟踪其资源的数据集。

1. 在为该数据集打开的页面中，选择**编辑数据集**。

1. 在打开的数据准备页面上，选择右上角的**管理**，然后选择**使用情况**。

1. 打开的窗格中列出了使用该数据集的控制面板和分析。

# 在 Amazon Quick 中使用数据集参数
<a name="dataset-parameters"></a>

在 Amazon Quick 中，作者可以在直接查询中使用数据集参数来动态自定义其数据集并将可重复使用的逻辑应用于其数据集。*数据集参数*是在数据集等级创建的参数。它由分析参数通过控件、计算字段、筛选器、操作 URLs、标题和描述消耗。有关分析参数的更多信息，请参阅 [Amazon Quick 中的参数](parameters-in-quicksight.md)。以下列表描述了可使用数据集参数执行的三个操作：
+  **直接查询中的自定义 SQL** – 数据集所有者可以将数据集参数插入直接查询数据集的自定义 SQL 中。在快速分析中将这些参数应用于筛选控件时，用户可以更快、更高效地筛选其自定义数据。
+ **可重复变量** – 可以使用自定义数据集参数在一次操作中修改出现在数据集页面中多个位置的静态值。
+ **将计算字段移至数据集**-快速作者可以在分析中复制带有参数的计算字段，然后将其迁移到数据集级别。这样可以防止分析等级的计算字段被意外修改，并且可以在多个分析之间共享计算字段。

在某些情况下，数据集参数可以提高需要复杂自定义 SQL 的直接查询数据集的筛选条件控件性能，并简化数据集等级的业务逻辑。

**Topics**
+ [数据集参数限制](#dataset-parameters-limitations)
+ [在 Amazon Quick 中创建数据集参数](dataset-parameters-SQL.md)
+ [将数据集参数插入自定义 SQL](dataset-parameters-insert-parameter.md)
+ [将数据集参数添加到计算字段](dataset-parameters-calculated-fields.md)
+ [将数据集参数添加到筛选条件](dataset-parameters-dataset-filters.md)
+ [在快速分析中使用数据集参数](dataset-parameters-analysis.md)
+ [数据集参数的高级使用案例](dataset-parameters-advanced-options.md)

## 数据集参数限制
<a name="dataset-parameters-limitations"></a>

本节介绍在 Amazon Quick 中使用数据集参数时可能遇到的已知限制。
+ 控制面板读者安排通过电子邮件发送的报告时，选定的控件不会传播到电子邮件所附报告中包含的数据集参数。而是使用参数的默认值。
+ 无法将数据集参数插入存储在 SPICE 中的数据集自定义 SQL 中。
+ 只能在使用数据集的分析的分析页面上配置动态默认值。您无法在数据集等级配置动态默认值。
+ 映射到数据集参数的分析参数的多值控件不支持**全选**选项。
+ 数据集参数不支持级联控件。
+ 只有数据集使用直接查询时，数据集筛选条件才能使用数据集参数。
+ 在自定义 SQL 查询中，只能使用 128 个数据集参数。

# 在 Amazon Quick 中创建数据集参数
<a name="dataset-parameters-SQL"></a>

使用以下过程开始使用数据集参数。

**创建新的数据集参数**

1. 在快速入门页面中，选择左侧**的数据**，选择要更改的数据集旁边的省略号（三个点），然后选择**编辑**。

1. 在打开的**数据集**页面上，选择左侧的**参数**，然后选择（\$1）图标创建新的数据集参数。

1. 在出现的**创建新的参数**弹出窗口中，在**名称**框中输入参数名称。

1. 在**数据类型**下拉菜单中，选择所需的参数数据类型。支持的数据类型包括：`String`、`Integer`、`Number` 和 `Datetime`。创建参数后将无法更改此选项。

1. 对于**默认值**，输入您希望参数具有的默认值。
**注意**  
将数据集参数映射到分析参数时，可以选择不同的默认值。发生这种情况时，此处配置的默认值将被新的默认值覆盖。

1. 对于**值**，选择您希望参数具有的值类型。**单个值**参数支持单选下拉、文本字段和列表控件。**多个值**参数支持多选下拉控件。创建参数后将无法更改此选项。

1. 完成配置新的参数后，选择**创建**以创建参数。

# 将数据集参数插入自定义 SQL
<a name="dataset-parameters-insert-parameter"></a>

通过在 SQL 语句中使用 `<<$parameter_name>>` 引用数据集参数，您可以在直接查询模式的数据集自定义 SQL 中插入数据集参数。运行时，控制面板用户可以输入与数据集参数关联的筛选条件控件值。然后，在值传播到 SQL 查询后，他们可以在控制面板视觉对象中看到结果。您可以根据客户在 `where` 子句中的输入使用参数创建基本筛选条件。或者，您可以添加 `case when` 或 `if else` 子句，以根据参数的输入动态更改 SQL 查询的逻辑。

例如，假设您要在自定义 SQL 中添加 `WHERE` 子句，以根据最终用户的区域名称筛选数据。在本例中，您将创建一个名为 `RegionName` 的单个值参数：

```
SELECT *
FROM transactions
WHERE region = <<$RegionName>>
```

您也可以让用户为参数提供多个值：

```
SELECT *
FROM transactions
WHERE region in (<<$RegionNames>>)
```

在以下更复杂的示例中，数据集作者根据可在控制面板筛选条件控件中选择的用户的名字和姓氏引用两个数据集参数两次：

```
SELECT Region, Country, OrderDate, Sales
FROM transactions
WHERE region=
(Case
WHEN <<$UserFIRSTNAME>> In 
    (select firstname from user where region='region1') 
    and <<$UserLASTNAME>> In 
    (select lastname from user where region='region1') 
    THEN 'region1'
WHEN <<$UserFIRSTNAME>> In 
    (select firstname from user where region='region2') 
    and <<$UserLASTNAME>> In 
    (select lastname from user where region='region2') 
    THEN 'region2'
ELSE 'region3'
END)
```

您还可以根据用户输入使用 `SELECT` 子句中的参数在数据集中创建新列：

```
SELECT Region, Country, date, 
    (case 
    WHEN <<$RegionName>>='EU'
    THEN sum(sales) * 0.93   --convert US dollar to euro
    WHEN <<$RegionName>>='CAN'
    THEN sum(sales) * 0.78   --convert US dollar to Canadian Dollar
    ELSE sum(sales) -- US dollar
    END
    ) as "Sales"
FROM transactions
WHERE region = <<$RegionName>>
```

要创建自定义 SQL 查询或在添加数据集参数之前编辑现有查询，请参阅 [使用 SQL 自定义数据](adding-a-SQL-query.md)。

使用数据集参数应用自定义 SQL 时，`<<$parameter_name>>` 将用作占位符值。当用户从控件中选择一个参数值时，Quick 会将占位符替换为用户在仪表板上选择的值。

在以下示例中，用户输入了新的自定义 SQL 查询，该查询按状态筛选数据：

```
select * from all_flights
where origin_state_abr = <<$State>>
```

参数的默认值应用于 SQL 查询，结果将显示在**预览窗格**中。

# 将数据集参数添加到计算字段
<a name="dataset-parameters-calculated-fields"></a>

您也可以使用格式 `${parameter_name}` 将数据集参数添加到计算字段表达式中。

在创建计算时，您可以从**参数**列表下面的参数列表中选择现有参数。无法创建包含多值参数的计算字段。

有关添加计算字段的更多信息，请参阅 [在 Amazon Quick 中使用带有参数的计算字段](parameters-calculated-fields.md)。

# 将数据集参数添加到筛选条件
<a name="dataset-parameters-dataset-filters"></a>

对于直接查询模式下的数据集，数据集作者可以在筛选条件中使用数据集参数，无需自定义 SQL。如果数据集在 SPICE 中，则无法将数据集参数添加到筛选条件中。

**将数据集参数添加到筛选条件**

1. 打开要为其创建筛选条件的数据集的数据集页面。选择左侧的**筛选条件**，然后选择**添加筛选条件**。

1. 输入您想要的筛选条件名称，然后在下拉菜单中选择要筛选的字段。

1. 创建新筛选条件后，在**筛选条件**窗格中导航到该筛选条件，选择筛选条件旁边的省略号（三个点），然后选择**编辑**。

1. 对于**筛选条件类型**，选择**自定义筛选条件**。

1. 对于**筛选条件**，选择所需的条件。

1. 选择**使用参数**框并选择希望筛选条件使用的数据集参数。

1. 完成更改后，选择**应用**。

# 在快速分析中使用数据集参数
<a name="dataset-parameters-analysis"></a>

创建数据集参数后，在将数据集添加到分析后，将该数据集参数映射到新的或现有的分析参数。将数据集参数映射到分析参数后，可以将它们与筛选条件、控件和任何其他分析参数功能一起使用。

您可以在使用参数所属数据集的分析的**参数**窗格中管理数据集参数。在**参数**窗格的**数据集参数**部分，您可以选择仅查看未映射的数据集参数（默认）。或者，您可以通过从**查看**下拉菜单中选择**全部**来选择查看所有已映射和未映射的数据集参数。

## 在新的 “快速分析” 中映射数据集参数
<a name="dataset-parameters-map-to-analysis"></a>

使用包含参数的数据集创建新分析时，需要先将数据集参数映射到分析，然后才能使用它们。向分析中添加带参数的数据集时，也是如此。您可以在分析的**参数**窗格中查看分析中所有未映射的参数。或者，在创建分析或添加数据集时，在页面右上角显示的通知消息中选择**查看**。

**将数据集参数映射到分析参数**

1. 打开 [Quick 控制台](https://quicksight.aws.amazon.com/)。

1. 选择要更改的分析。

1. 选择**参数**图标以打开**参数**窗格。

1. 选择要映射的数据集参数旁边的省略号（三个点），选择**映射参数**，然后选择要将数据集参数映射到的分析参数。

   如果您的分析没有任何分析参数，则可以选择**映射参数** 和**新建**来创建在创建时自动映射到数据集参数的分析参数。

   1. 在出现的**创建新的参数**弹出窗口中，对于**名称**，为新分析参数输入名称。

   1. （可选）对于**静态默认值**，输入您希望参数具有的静态默认值。

   1. （可选）选择**设置动态默认值**，为新参数设置动态默认值。

   1. 在**已映射的数据集参数**表中，您将看到即将映射到新分析参数的数据集参数。您可以选择**添加数据集参数**下拉菜单，然后选择要映射的参数，向此分析参数添加其他数据集参数。您可以选择要删除的数据集参数旁边的**删除**按钮来取消映射数据集参数。

   有关创建分析参数的更多信息，请参阅 [在 Amazon Quick 中设置参数](parameters-set-up.md)。

将数据集参数映射到分析参数时，无论该参数在分析中用于何处，分析参数都代表数据集参数。

您也可以在**编辑参数**窗口中将数据集参数映射和取消映射到分析参数。要打开**编辑参数**窗口，导航到**参数**窗格，选择要更改的分析参数旁边的省略号（三个点），然后选择**编辑参数**。您可以选择**添加数据集参数**下拉菜单，然后选择要映射的参数，向此分析参数添加其他数据集参数。您可以选择要删除的数据集参数旁边的**删除**按钮来取消映射数据集参数。您也可以选择**全部删除**来删除所有已映射的数据集参数。完成更改后，选择**更新**。

删除分析参数时，将从分析中取消映射所有数据集参数，并在**参数**窗格的**未映射的**部分中显示。一次只能将一个数据集参数映射到一个分析参数。要将数据集参数映射到不同的分析参数，请取消映射该数据集参数，然后将其映射到新的分析参数。

## 向已映射的分析参数添加筛选条件控件
<a name="dataset-parameters-analysis-filter-control"></a>

在 Quick 中将数据集参数映射到分析参数后，您可以为筛选器、操作、计算字段、标题、描述和创建筛选控件 URLs。

**将控件添加到已映射的参数**

1. 在分析页面的**参数**窗格中，选择所需已映射的分析参数旁边的省略号（三个点），然后选择**添加控件**。

1. 在出现的**添加控件**窗口中，输入所需**名称**，然后选择您想要的控件**样式**。对于单个值控件，请在 `Dropdown`、`List` 和 `Text field` 之间选择。对于多值控件，请选择 `Dropdown`。

1. 选择**添加**来创建控件。

# 数据集参数的高级使用案例
<a name="dataset-parameters-advanced-options"></a>

本节介绍使用数据集参数和下拉控件的更多高级选项和使用案例。使用以下演练创建带数据集参数的动态下拉值。

## 使用带数据集参数的多值控件
<a name="dataset-parameters-dropdown"></a>

使用插入到数据集自定义 SQL 中的数据集参数时，数据集参数通常按特定列中的值筛选数据。如果您创建下拉控件并将参数指定为值，则下拉菜单仅显示参数筛选的值。以下过程说明如何创建映射到数据集参数并显示所有未筛选值的控件。

**在下拉控件中填充所有分配的值**

1. 在 SPICE 或直接查询中创建新的单列数据集，其中包含原始数据集中的所有唯一值。例如，假设您的原始数据集使用以下自定义 SQL：

   ```
   select * from all_flights
           where origin_state_abr = <<$State>>
   ```

   要创建具有所有唯一原始状态的单列表，请将以下自定义 SQL 应用于新数据集：

   ```
   SELECT distinct origin_state_abr FROM all_flights
           order by origin_state_abr asc
   ```

   SQL 表达式按字母顺序返回所有唯一状态。新数据集没有任何数据集参数。

1. 输入新数据集的**名称**，然后保存并发布该数据集。在我们的示例中，新数据集称为 `State Codes`。

1. 打开包含原始数据集的分析，然后将新数据集添加到分析。有关将数据集添加到现有分析的信息，请参阅 [向分析中添加数据集](adding-a-data-set-to-an-analysis.md)。

1. 导航至**控件**窗格并找到要编辑的下拉控件。选择控件旁边的省略号（三个点），然后选择**编辑**。

1. 在左侧显示的**格式控件**中，选择**值**部分中的**链接到数据集字段**。

1. 在显示的**数据集**下拉菜单中，选择创建的新数据集。在我们的示例中，选择了 `State Codes` 数据集。

1. 在出现的**字段**下拉菜单中，选择相应的字段。在我们的示例中，选择了 `origin_state_abr` 字段。

将控件链接到新数据集后，所有唯一值都会出现在控件的下拉菜单中。这些值包括数据集参数筛选掉的值。

## 使用带“全选”选项的控件
<a name="dataset-parameters-controls-select-all"></a>

默认情况下，一个或多个数据集参数映射到分析参数并添加到控件时，`Select all` 选项不可用。以下过程显示了使用与上一节相同的示例场景的解决方法。

**注意**  
此演练适用于小到足以在直接查询中加载的数据集。如果您的数据集很大，并且想要使用 `Select All` 选项，建议您将数据集加载到 SPICE 中。但是，如果您想将 `Select All` 选项与数据集参数一起使用，此演练将介绍一种实现方法。

首先，假设您有一个带自定义 SQL 的直接查询数据集，其中包含名为 `States` 的多值参数：

```
select * from all_flights
where origin_state_abr in (<<$States>>)
```

**在使用数据集参数的控件中使用“全选”选项**

1. 在分析的**参数**窗格中，找到要使用的数据集参数，然后从参数旁边的省略号（三个点）中选择**编辑**。

1. 在出现的**编辑参数**窗口中，在**多个静态默认值**部分中输入新的默认值。在我们的示例中，默认值为 ` All States`。请注意，该示例使用前导空格字符，因此默认值显示为控件中的第一项。

1. 选择**更新**以更新参数。

1. 导航到包含您在中使用的数据集参数的数据集 analysis-by-analysis。编辑数据集的自定义 SQL，以包含新的多个静态默认值的默认使用案例。使用 ` All States` 示例时，SQL 表达式如下所示：

   ```
   select * from public.all_flights
   where
       ' All States' in (<<$States>>) or
       origin_state_abr in (<<$States>>)
   ```

   如果用户在控件中选择 ` All States`，则新的 SQL 表达式将返回所有唯一记录。如果用户从控件中选择不同的值，则查询将返回数据集参数筛选的值。

### 使用带“全选”和“多值”选项的控件
<a name="dataset-parameters-controls-multi-select-all"></a>

您可以将前面的 `Select all` 过程与前面讨论的多值控件方法结合使用，创建除用户可以选择的多个值之外还包含 `Select all` 值的下拉控件。此演练假设您已经按照前面的步骤进行操作，知道如何将数据集参数映射到分析参数，并且可以在分析中创建控件。有关映射分析参数的更多信息，请参阅 [在新的 “快速分析” 中映射数据集参数](dataset-parameters-analysis.md#dataset-parameters-map-to-analysis)。有关在使用数据集参数的分析中创建控件的更多信息，请参阅 [向已映射的分析参数添加筛选条件控件](dataset-parameters-analysis.md#dataset-parameters-analysis-filter-control)。

**使用“全选”选项和已映射的数据集参数将多个值添加到控件**

1. 使用 `Select all` 自定义 SQL 表达式打开包含原始数据集的分析，以及包含原始数据集中已有筛选列的所有可能值的第二个数据集。

1. 导航至之前创建的辅助数据集以返回筛选列的所有值。添加自定义 SQL 表达式，将之前配置的 `Select all` 选项添加到查询中。以下示例将 ` All States` 记录添加到数据集返回值列表的前面：

   ```
   (Select ' All States' as origin_state_abr)
       Union All
       (SELECT distinct origin_state_abr FROM all_flights
       order by origin_state_abr asc)
   ```

1. 返回数据集所属的分析，并将您正在使用的数据集参数映射到您在前面过程的步骤 3 中创建的分析参数。分析参数和数据集参数可以使用相同的名称。在我们的示例中，分析参数称为 `States`。

1. 创建新的筛选条件控件或编辑现有的筛选条件控件，然后选择**隐藏全选**，以隐藏多值控件中显示的已禁用**全选**选项。

创建控件后，用户可以使用同一个控件来选择数据集中筛选列的全部或多个值。

# 在 Amazon Quick 中使用行级安全
<a name="row-level-security"></a>


|  | 
| --- |
|  适用于：企业版  | 

在 Amazon Quick 的企业版中，您可以通过配置行级安全 (RLS) 来限制对数据集的访问。在共享数据集之前或之后，您可以执行该操作。当您使用 RLS 与数据集所有者共享数据集时，他们仍然可以看到所有数据。但是，当您与读者共享该数据集时，他们只能看到受权限数据集规则限制的数据。

此外，当您在应用程序中为未注册的 Quick 用户嵌入 Amazon Quick 控制面板时，您可以对带有标签的数据使用行级安全 (RLS)。 filter/restrict 标签是用户指定的字符串，用于标识应用程序中的会话。您可以使用标签为数据集实现 RLS 控制。通过在数据集中配置基于 RLS 的限制，Quick 会根据与用户身份/会话关联的会话标签筛选数据。

您可以使用用户名或基于组的规则、基于标签的规则或两者来限制对数据集的访问。

如果要保护在 Quick 中配置（注册）的用户或群组的数据，请选择基于用户的规则。为此，请选择一个权限数据集，该数据集包含按列为访问数据的每个用户或组设置的规则。只有规则中标识的用户或组才有权访问数据。

只有当您使用嵌入式仪表板并希望保护未在 Quick 中设置的用户（未注册用户）的数据时，才选择基于标签的规则。为此，请在列上定义标签来保护数据。嵌入控制面板时，必须传递标签的值。

**Topics**
+ [使用采用基于用户的规则的行级别安全性限制对数据集的访问](restrict-access-to-a-data-set-using-row-level-security.md)
+ [为匿名用户嵌入控制面板时，使用采用基于标签的规则的行级别安全性来限制对数据集的访问](quicksight-dev-rls-tags.md)

# 使用采用基于用户的规则的行级别安全性限制对数据集的访问
<a name="restrict-access-to-a-data-set-using-row-level-security"></a>


|  | 
| --- |
|  适用于：企业版  | 

在 Amazon Quick 的企业版中，您可以通过配置行级安全 (RLS) 来限制对数据集的访问。在共享数据集之前或之后，您可以执行该操作。当您使用 RLS 与数据集所有者共享数据集时，他们仍然可以看到所有数据。但是，当您与读者共享该数据集时，他们只能看到受权限数据集规则限制的数据。通过添加行级别安全性，您可以进一步控制其访问权限。

**注意**  
将 SPICE 数据集应用于行级别安全性时，数据集中的每个字段最多可以包含 2,047 个 Unicode 字符。如果字段包含的内容超过该限额，则会在摄取过程中被截断。要了解有关 SPICE 数据限额的更多信息，请参阅[导入数据的 SPICE 限额](data-source-limits.md#spice-limits)。

为此，您需要创建一个查询或文件，其中包含一列用于标识用户或群组。你可以使用`UserName`和`GroupName`，也可以使用`UserARN`和`GroupARN`。您可以将这看作是为该用户或组*添加规则*。然后您可以为要授予或限制访问权限的每个字段向查询或文件添加一个列。对于您添加的每个用户名或组名，请添加每个字段的值。您可以使用 NULL (没有值) 表示所有值。要查看示例数据集规则，请参阅[为行级别安全性创建数据集规则](#create-data-set-rules-for-row-level-security)。

要应用数据集规则，请将规则作为权限数据集添加到您的数据集。请记住以下几点：
+ 权限数据集不能包含重复值。评估如何应用规则时，将忽略重复项。
+ 指定的每个用户或组只能看到*匹配*数据集规则中字段值的行。
+ 如果为某个用户或组添加规则，并将其余列保留为“没有值”（NULL），则表示您向其授予访问所有数据的权限。
+ 如果不为用户或组添加规则，则该用户或组无法看到任何数据。
+ 应用于每个用户的完整规则记录集不得超过 999 个。此限制适用于直接分配给用户名的规则总数以及通过组名称分配给用户的任何规则。
+ 如果字段包含逗号 (,)，Amazon Quick 会将每个用逗号分隔的单词视为筛选器中的单个值。例如，在 `('AWS', 'INC')` 中，`AWS,INC` 被视为两个字符串：`AWS` 和 `INC`。要使用 `AWS,INC` 筛选，请在权限数据集中用双引号将字符串包装起来。

  如果受限数据集是一个 SPICE 数据集，则每个用户对每个受限字段应用的筛选值数量不能超过 19.2 万个。这适用于直接分配给用户名的筛选条件值总数以及通过组名称分配给用户的任何筛选条件值。

  如果受限数据集是直接查询数据集，则每个用户应用的筛选值数量因数据来源而异。

  超过筛选值限制可能会导致视觉渲染失败。我们建议您在受限数据集中添加一个附加列，以便根据原始受限列将行分成几组，从而缩短筛选条件列表。

Amazon Quick 将空格视为文字值。如果您限制的字段中有一个空格，则数据集规则适用于这些行。Amazon Quick 将两个 NULLs 空白（空字符串 “”）都视为 “无值”。NULL 是一个空字段值。

根据数据集的具体数据来源，您可以配置直接查询来访问权限表。以空格分隔的词不需要用引号分隔。如果您使用直接查询，您可以轻松更改原始数据来源中的查询。

您也可以从文本文件或电子表格中上传数据集规则。如果您使用的是逗号分隔值 (CSV) 文件，请不要在给定的行中包含任何空格。以空格分隔的词需要用引号分隔。如果使用基于文件的数据集规则，请通过在数据集的权限设置中覆盖现有规则来应用任何更改。

在 “数据” 屏幕中，受限制**的数据**集标有 “**受**限制” 一词。

从已激活 RLS 规则的父数据集创建的子数据集，将保留与父数据集相同的 RLS 规则。您可以向子数据集添加更多 RLS 规则，但不能移除该数据集继承自父数据集的 RLS 规则。

只有通过直接查询，才能创建从已激活 RLS 规则的父数据集创建的子数据集。SPICE 不支持继承父数据集的 RLS 规则的子数据集。

行级别安全性仅适用于包含文本数据（string、char、varchar 等）的字段。它目前不适用于日期或数字字段。使用行级别安全性（RLS）的数据集不支持异常检测。

## 为行级别安全性创建数据集规则
<a name="create-data-set-rules-for-row-level-security"></a>

要创建权限文件或查询用作数据集规则，请按照以下过程操作。

**创建权限文件或查询用作数据集规则**

1. 创建一个文件或查询，其中包含适用于行级别安全性的数据集规则（权限）。

   字段顺序至关紧要。不过，所有字段区分大小写。确保它们与字段名称和值完全匹配。

   结构应类似于下列项目之一。确保您至少具有一个标识用户或组的字段。您可以包含两者，但只需要一个，并且一次只使用一个。您可以为用户或组所用的字段选择任意名称。
**注意**  
如果您要指定群组，请仅使用 Amazon Quick 群组或 Microsoft AD 群组。

   以下示例显示了一个包含组的表。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   以下示例演示了一个包含用户名的表。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   以下示例显示了一个包含用户和群组 Amazon 资源名称 (ARNs) 的表。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   如果您使用 .csv 文件，结构应与以下某个示例相似。

   ```
   UserName,SalesRegion,Segment
   AlejandroRosalez,EMEA,"Enterprise,SMB,Startup"
   MarthaRivera,US,Enterprise
   NikhilJayashankars,US,SMB
   PauloSantos,US,Startup
   SaanviSarkar,APAC,"SMB,Startup"
   sales-tps@example.com,"",""
   ZhangWei,APAC-Sales,"Enterprise,Startup"
   ```

   ```
   GroupName,SalesRegion,Segment
   EMEA-Sales,EMEA,"Enterprise,SMB,Startup"
   US-Sales,US,Enterprise
   US-Sales,US,SMB
   US-Sales,US,Startup
   APAC-Sales,APAC,"SMB,Startup"
   Corporate-Reporting,"",""
   APAC-Sales,APAC,"Enterprise,Startup"
   ```

   ```
   UserARN,GroupARN,SalesRegion
   arn:aws:quicksight:us-east-1:123456789012:user/Bob,arn:aws:quicksight:us-east-1:123456789012:group/group-1,APAC
   arn:aws:quicksight:us-east-1:123456789012:user/Sam,arn:aws:quicksight:us-east-1:123456789012:group/group-2,US
   ```

   以下是一个 SQL 示例。

   ```
   /* for users*/
   	select User as UserName, SalesRegion, Segment
   	from tps-permissions;
   
   	/* for groups*/
   	select Group as GroupName, SalesRegion, Segment
   	from tps-permissions;
   ```

1. 根据数据集规则创建数据集。要确保您可以轻松找到该数据集，请为其指定有意义的名称，例如 **Permissions-Sales-Pipeline**。

## 标记行级别安全性的规则数据集
<a name="rules-dataset-flagging-for-row-level-security"></a>

使用以下过程将数据集适当地标记为规则数据集。

规则数据集是一个标志，用于区分用于行级别安全性的权限数据集和常规数据集。如果权限数据集在 2025 年 3 月 31 日之前应用于常规数据集，则它将在**数据集**登录页面中具有规则数据集标志。

如果权限数据集在 2025 年 3 月 31 日之前未应用于常规数据集，则它将被归类为常规数据集。要将其用作规则数据集，请复制权限数据集并在创建数据集时在控制台上将其标记为规则数据集。选择 “编辑数据集”，然后在选项下选择 “按规则重复数据集”。

要成功将其复制为规则数据集，请确保原始数据集具有：1. 必需的用户元数据或组元数据列；2. 仅字符串类型的列。

要在控制台上创建新的规则数据集，请在“新建数据集”下拉列表中选择“新建规则数据集”。以编程方式创建规则数据集时，请添加以下参数：[UseAs: RLS\$1R](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateDataSet.html#API_CreateDataSet_RequestSyntax) ULES。这是一个可选参数，仅用于创建规则数据集。一旦通过控制台或以编程方式创建了数据集，并将其标记为规则数据集或常规数据集，就无法更改。

一旦数据集被标记为规则数据集，Amazon Quick 就会对其应用严格的 SPICE 摄取规则。为了确保数据完整性，如果存在无效行或单元格超过长度限制，规则数据集的 SPICE 摄取将会失败。您必须修复摄取问题才能重新启动成功的摄取。严格的摄取规则仅适用于规则数据集。当出现跳过行或字符串截断的情况时，常规数据集不会出现数据集摄取失败。

## 应用行级别安全性
<a name="apply-row-level-security"></a>

要通过将文件或查询用作包含权限规则的数据集来应用行级别安全性（RLS），请按照以下过程操作。

**使用文件或查询应用行级别安全性**

1. 确认已将您的规则添加为新数据集。如果添加了这些规则，但在数据集列表中看不到这些规则，请刷新屏幕。

1. 在**数据**页面上，选择数据集

1. 在打开的数据集详细信息页面上，为**行级别安全性**选择**设置**。

1. 在打开的**设置行级别安全性**页面上，选择**基于用户的规则**。

1. 从显示的数据集列表中选择自己的权限数据集。

   如果该屏幕上未显示您的权限数据集，请返回到自己的数据集，然后刷新该页面。

1. 对于**权限策略**，选择**授予对数据集的访问权限**。每个数据集仅具有一个活动权限数据集。如果您尝试添加第二个权限数据集，它将覆盖现有的数据集。
**重要**  
在使用行级别安全性时，某些限制适用于 NULL 和空字符串值：  
如果您的数据集在受限制的字段中具有 NULL 值或空字符串（“”），在应用限制后，将忽略这些行。
在权限数据集中，NULL 值和空字符串以相同方式处理。有关更多信息，请参阅下表。
为了防止意外泄露敏感信息，Amazon Quick 跳过了向所有人授予访问权限的空白 RLS 规则。当一行的所有列都没有值时，就会出现*空 RLS 规则*。Quick RLS 将 NULL、空字符串 (“”) 或逗号分隔的空字符串（例如 “、、、”）视为无值。  
跳过空规则后，其他非空 RLS 规则仍然适用。
如果权限数据集只有空规则且所有空规则都被跳过，则任何人都无法访问受此权限数据集限制的任何数据。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   您与之共享控制面板的任何用户都可以查看其中的所有数据，除非数据集规则限制数据集。

1. 要保存更改，请选择**应用数据集**。然后，在**保存数据集规则？**页面上选择**应用并激活**。权限更改将立即应用于现有用户。

1. （可选）要删除权限，请先从数据集中删除数据集规则。

   确保已删除数据集规则。接下来，选择权限数据集，然后选择**删除数据集**。

   要覆盖权限，请选择新的权限数据集，然后应用该数据集。您可以重复使用相同的数据集名称。但是，请务必在**权限**屏幕中应用新权限来激活这些权限。SQL 查询会动态更新，因此可以在 Amazon Quick 之外对其进行管理。对于查询，权限会在自动刷新直接查询缓存时更新。

从目标数据集中删除基于文件的权限数据集之前，如果已删除该数据集，则受限制的用户无法访问该数据集。在数据集处于该状态时，它仍标记为**受限**。不过，在查看该数据集的**权限**时，您可以看到该数据集没有选择的数据集规则。

要解决该问题，应指定新的数据集规则。创建具有相同名称的数据集不足以解决该问题。您必须在**权限**屏幕中选择新权限数据集。该限制不适用于直接 SQL 查询。

# 为匿名用户嵌入控制面板时，使用采用基于标签的规则的行级别安全性来限制对数据集的访问
<a name="quicksight-dev-rls-tags"></a>


|  | 
| --- |
|  适用于：企业版  | 


|  | 
| --- |
|    目标受众：Amazon Quick 管理员和 Amazon Quick 开发者  | 

当您在应用程序中为未在 Quick 中配置（注册）的用户嵌入 Amazon Quick 控制面板时，您可以使用行级安全 (RLS) 来 filter/restrict 保护带有标签的数据。标签是用户指定的字符串，用于标识应用程序中的会话。您可以使用标签为数据集实现 RLS 控制。通过在数据集中配置基于 RLS 的限制，Quick 根据与用户身份/会话关联的会话标签筛选数据。

例如，假设您的物流公司会为各种零售商提供面向客户的应用程序。来自这些零售商的成千上万名用户会访问您的应用程序，查看与他们的订单如何从您的仓库发货相关的指标。

您不想在 Quick 中管理成千上万的用户，因此您可以使用匿名嵌入将选定的仪表板嵌入到您的应用程序中，经过身份验证和授权的用户可以看到这些仪表板。不过，您要确保零售商只能看到与其业务相关的数据，而不会看到其他业务数据。您可以使用带标签的 RLS 来确保客户只能看到与他们相关的数据。

为此，请完成以下步骤：

1. 向数据集添加 RLS 标签。

1. 在运行时系统中使用 `GenerateEmbedUrlForAnonymousUser` API 操作为这些标签分配值。

   有关使用 `GenerateEmbedUrlForAnonymousUser` API 操作为匿名用户嵌入控制面板的更多信息，请参阅[为匿名（未注册）用户嵌入 Amazon Quick Sight 控制面板](embedded-analytics-dashboards-for-everyone.md)。

使用带标签的 RLS 之前，请记住以下几点：
+ 目前仅匿名嵌入尤其是使用 `GenerateEmbedUrlForAnonymousUser` API 操作的嵌入式控制面板，才支持使用带标签的 RLS。
+ 使用 `GenerateEmbedURLForRegisteredUser` API 操作或旧 `GetDashboardEmbedUrl` API 操作的嵌入式控制面板不支持使用带标签的 RLS。
+  AWS Identity and Access Management (IAM) 或快速身份类型不支持 RLS 标签。
+ 将 SPICE 数据集应用于行级别安全性时，数据集中的每个字段最多可以包含 2,047 个 Unicode 字符。如果字段包含的内容超过该限额，则会在摄取过程中被截断。要了解有关 SPICE 数据限额的更多信息，请参阅[导入数据的 SPICE 限额](data-source-limits.md#spice-limits)。

## 步骤 1：向数据集添加 RLS 标签
<a name="quicksight-dev-rls-tags-add"></a>

您可以在 Amazon Quick 中向数据集添加基于标签的规则。您也可以调用 `CreateDataSet` 或 `UpdateDataSet` API 操作来添加基于标签的规则。有关更多信息，请参阅 [使用 API 向数据集添加 RLS 标签](#quicksight-dev-rls-tags-add-api)。

使用以下步骤在 Quick 中向数据集添加 RLS 标签。

**向数据集添加 RLS 标签**

1. 在快速入门页面中，选择左侧**的数据**。

1. 选择要向其添加 RLS 的数据集。

1. 在打开的数据集详细信息页面上，为**行级别安全性**选择**设置**。

1. 在打开的**设置行级别安全性**页面上，选择**基于标签的规则**。

1. 对于**列**，选择要添加标签规则的列。

   例如，若为物流公司，则使用 `retailer_id` 列。

   仅列出数据类型为字符串的列。

1. 对于**标签**，输入标签键。您可以输入所需的任何标签名称。

   例如，若为物流公司，则使用 `tag_retailer_id` 标签键。这样做可以根据访问应用程序的零售商来设置行级别安全性。

1. （可选）对于**分隔符**，从列表中选择一个分隔符，或输入自己的分隔符。

   为标签分配多个值时，可以使用分隔符来分隔文本字符串。分隔符的值最长可达 10 个字符。

1. （可选）对于**全部匹配**，选择 **\$1**，或输入自己的一个或多个字符。

   在要按数据集中该列的所有值进行筛选时，此选项可以是您希望使用的任何字符。您可以使用字符，而不是逐一列出值。如果指定了此值，则其长度可以至少为一个字符，或最多 256 个字符。

1. 选择**添加**。

   标签规则已添加到数据集并在底部列出，但尚未应用。要向数据集添加其他标签规则，请重复步骤 5 到 9。要编辑标签规则，请选择规则后面的铅笔图标。要删除标签规则，请选择规则后面的删除图标。您最多可以向数据集添加 50 个标签。

1. 准备好将标签规则应用于数据集时，选择**应用规则**。

1. 在打开的**是否启用基于标签的安全性？**页面中，选择**应用并激活**。

   基于标签的规则现已激活。**设置行级别安全性**页面将显示一个切换开关，供您开启和关闭数据集的标签规则。

   要关闭数据集的所有基于标签的规则，请关闭**基于标签的规则**开关，然后在出现的文本框中输入“确认”。

   在**数据**页面上，数据集行中会出现一个锁形图标，表示标签规则已启用。

   您现在可以在运行时系统中使用标签规则来设置标签值，如 [步骤 2：在运行时系统中为 RLS 标签分配值](#quicksight-dev-rls-tags-assign-values) 中所述。这些规则仅在处于活动状态时影响快速阅读器。
**重要**  
在数据集上分配并启用标签后，请确保授予 Quick authors 权限，以便在创作仪表板时查看数据集中的任何数据。  
要授予 Quick 作者查看数据集中数据的权限，请创建权限文件或查询以用作数据集规则。有关更多信息，请参阅 [为行级别安全性创建数据集规则](restrict-access-to-a-data-set-using-row-level-security.md#create-data-set-rules-for-row-level-security)。

创建基于标签的规则后，将出现一个新的**管理规则**表，其中会显示基于标签的规则之间的关系。要更改**管理规则**表中列出的规则，请选择规则后面的铅笔图标。然后添加或移除标签，并选择**更新**。要将更新后的规则应用于数据集，请选择**应用**。

### （可选）将 OR 条件添加到 RLS 标签
<a name="quicksight-dev-rls-tags-or"></a>

您还可以在基于标签的规则中添加 OR 条件，以进一步自定义向 Quick 账户用户显示数据的方式。当您在基于标签的规则中使用 OR 条件时，如果规则中定义的至少一个标签有效，则会显示 Quick 中的视觉效果。

**将 OR 条件添加到基于标签的规则**

1. 在**管理规则**表中，选择**添加 OR 条件**。

1. 在出现的**选择标签**下拉列表中，选择要创建 OR 条件的标签。您最多可以向**管理规则**表添加 50 个 OR 条件。您可以向数据集中的单列添加多个标签，但规则中至少需要包含一个列标签。

1. 选择**更新**将条件添加到规则，然后选择**应用**将更新后的规则应用于数据集。

### 使用 API 向数据集添加 RLS 标签
<a name="quicksight-dev-rls-tags-add-api"></a>

您也可以通过调用 `CreateDataSet` 或 `UpdateDataSet` API 操作，在数据集中配置并启用基于标签的行级别安全性。通过以下示例了解如何操作。

**重要**  
在 API 调用中配置会话标签时，  
将会话标签视为安全证书。不要向最终用户或客户端代码公开会话标签。
实现服务器端控制。确保会话标签完全由您可信的后端服务设置，而不是由最终用户可以修改的参数设置。
保护会话标签不被枚举。确保一个租户中的用户无法发现或猜测属于其他租户的 SessionTag 值。
查看您的架构。如果允许下游客户或合作伙伴直接调用 API，请评估这些用户是否可以为他们不应访问的租户指定 SessionTag 值。

------
#### [ CreateDataSet ]

以下示例展示了如何创建带 RLS 标签的数据集。该示例采用了前述的物流公司场景。标签在 `row-level-permission-tag-configuration` 元素中定义。标签在数据要受到保护的列上定义。有关此可选元素的更多信息，请参阅 *Amazon Quick API 参考[RowLevelPermissionTagConfiguration](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowLevelPermissionTagConfiguration.html)*中的。

```
create-data-set
		--aws-account-id <value>
		--data-set-id <value>
		--name <value>
		--physical-table-map <value>
		[--logical-table-map <value>]
		--import-mode <value>
		[--column-groups <value>]
		[--field-folders <value>]
		[--permissions <value>]
		[--row-level-permission-data-set <value>]
		[--column-level-permission-rules <value>]
		[--tags <value>]
		[--cli-input-json <value>]
		[--generate-cli-skeleton <value>]
		[--row-level-permission-tag-configuration 
	'{
		"Status": "ENABLED",
		"TagRules": 
			[
				{
					"TagKey": "tag_retailer_id",
					"ColumnName": "retailer_id",
					"TagMultiValueDelimiter": ",",
					"MatchAllValue": "*"
				},
				{
					"TagKey": "tag_role",
					"ColumnName": "role"
				}
			],
		"TagRuleConfigurations":
			[
				tag_retailer_id
			],
			[
				tag_role
			]
	}'
]
```

本示例中的标签是在元素的 `TagRules` 部分中定义的。在本示例中，根据两列定义了两个标签：
+ `tag_retailer_id` 标签键是为 `retailer_id` 列定义的。对本示例中的物流公司而言，这将根据访问应用程序的零售商来设置行级别安全性。
+ `tag_role` 标签键是为 `role` 列定义的。对本示例中的物流公司而言，这将根据从特定零售商访问应用程序的用户的角色来设置额外的行级别安全性层。例如 `store_supervisor` 或 `manager`。

对于每个标签，您都可以定义 `TagMultiValueDelimiter` 和 `MatchAllValue`。这二者都是可选项。
+ `TagMultiValueDelimiter` – 此选项可以是任意字符串，用于在运行时系统中传递值时分隔值。此值最长可达 10 个字符。本示例使用逗号作为分隔符值。
+ `MatchAllValue` – 在要按数据集中该列的所有值进行筛选时，此选项可以是您希望使用的任何字符。您可以使用字符，而不是逐一列出值。如果指定了此值，其长度至少为一个字符，最多为 256 个字符。本示例使用星号作为通配值。

在为数据集列配置标签时，请使用强制属性 `Status` 开启或关闭标签。要启用标签规则，请为该属性使用值 `ENABLED`。启用标签规则后，就可以在运行时系统中使用这些规则来设置标签值，如 [步骤 2：在运行时系统中为 RLS 标签分配值](#quicksight-dev-rls-tags-assign-values) 中所述。

以下为响应定义的示例。

```
{
			"Status": 201,
			"Arn": "arn:aws:quicksight:us-west-2:11112222333:dataset/RLS-Dataset",
			"DataSetId": "RLS-Dataset",
			"RequestId": "aa4f3c00-b937-4175-859a-543f250f8bb2"
		}
```

------
#### [ UpdateDataSet ]

**UpdateDataSet**

您可以使用 `UpdateDataSet` API 操作为现有数据集添加或更新 RLS 标签。

以下为使用 RLS 标签更新数据集的示例。该示例采用了前述的物流公司场景。

```
update-data-set
		--aws-account-id <value>
		--data-set-id <value>
		--name <value>
		--physical-table-map <value>
		[--logical-table-map <value>]
		--import-mode <value>
		[--column-groups <value>
		[--field-folders <value>]
		[--row-level-permission-data-set <value>]
		[--column-level-permission-rules <value>]
		[--cli-input-json <value>]
		[--generate-cli-skeleton <value>]
				[--row-level-permission-tag-configuration 
	'{
		"Status": "ENABLED",
		"TagRules": 
			[
				{
					"TagKey": "tag_retailer_id",
					"ColumnName": "retailer_id",
					"TagMultiValueDelimiter": ",",
					"MatchAllValue": "*"
				},
				{
					"TagKey": "tag_role",
					"ColumnName": "role"
				}
			],
		"TagRuleConfigurations":
			[
				tag_retailer_id
			],
			[
				tag_role
			]
	}'
]
```

以下为响应定义的示例。

```
{
			"Status": 201,
			"Arn": "arn:aws:quicksight:us-west-2:11112222333:dataset/RLS-Dataset",
			"DataSetId": "RLS-Dataset",
			"RequestId": "aa4f3c00-b937-4175-859a-543f250f8bb2"
		}
```

------

**重要**  
在数据集上分配并启用标签后，请确保授予 Quick authors 权限，以便在创作仪表板时查看数据集中的任何数据。  
要授予 Quick 作者查看数据集中数据的权限，请创建权限文件或查询以用作数据集规则。有关更多信息，请参阅 [为行级别安全性创建数据集规则](restrict-access-to-a-data-set-using-row-level-security.md#create-data-set-rules-for-row-level-security)。

有关该`RowLevelPermissionTagConfiguration`元素的更多信息，请参阅 *Amazon Quick API 参考[RowLevelPermissionTagConfiguration](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowLevelPermissionTagConfiguration.html)*中的。

## 步骤 2：在运行时系统中为 RLS 标签分配值
<a name="quicksight-dev-rls-tags-assign-values"></a>

您只能将 RLS 标签用于匿名嵌入。您可以使用 `GenerateEmbedUrlForAnonymousUser` API 操作为标签设置值。

**重要**  
在 API 调用中配置会话标签时，  
将会话标签视为安全证书。不要向最终用户或客户端代码公开会话标签。
实现服务器端控制。确保会话标签完全由您可信的后端服务设置，而不是由最终用户可以修改的参数设置。
保护会话标签不被枚举。确保一个租户中的用户无法发现或猜测属于其他租户的 SessionTag 值。
查看您的架构。如果允许下游客户或合作伙伴直接调用 API，请评估这些用户是否可以为他们不应访问的租户指定 SessionTag 值。

以下示例演示了如何为上一步数据集中定义的 RLS 标签分配值。

```
POST /accounts/AwsAccountId/embed-url/anonymous-user
	HTTP/1.1
	Content-type: application/json
	{
		“AwsAccountId”: “string”,
		“SessionLifetimeInMinutes”: integer,
		“Namespace”: “string”, // The namespace to which the anonymous end user virtually belongs
		“SessionTags”:  // Optional: Can be used for row-level security
			[
				{
					“Key”: “tag_retailer_id”,
					“Value”: “West,Central,South”
				}
				{
					“Key”: “tag_role”,
					“Value”: “shift_manager”
				}
			],
		“AuthorizedResourceArns”:
			[
				“string”
			],
		“ExperienceConfiguration”:
			{
				“Dashboard”:
					{
						“InitialDashboardId”: “string”
						// This is the initial dashboard ID the customer wants the user to land on. This ID goes in the output URL.
					}
			}
	}
```

以下为响应定义的示例。

```
HTTP/1.1 Status
	Content-type: application/json

	{
	"EmbedUrl": "string",
	"RequestId": "string"
	}
```

只有 `GenerateEmbedUrlForAnonymousUser` API 操作才支持无需在 Quick 中注册用户的 RLS。在此操作中，您可以在 `SessionTags` 下定义与数据集列关联的标签的值。

本示例定义了以下分配：
+ 值 `West`、`Central` 和 `South` 在运行时系统中分配给 `tag_retailer_id` 标签。数据集中的 `TagMultipleValueDelimiter` 中定义的分隔符使用一个逗号。要在列中使用调用值，可以将值设置为 *\$1*，该值在创建标签时定义为 `MatchAllValue`。
+ 值 `shift_manager` 被分配给 `tag_role` 标签。

使用生成的 URL 的用户只能查看 `role` 列中包含 `shift_manager` 值的行。该用户只能查看 `retailer_id` 列中的值 `West`、`Central` 或 `South`。

有关使用 `GenerateEmbedUrlForAnonymousUser` API 操作为匿名用户嵌入控制面板的更多信息[为匿名（未注册）用户嵌入 Amazon Quick Sight 控制面板](embedded-analytics-dashboards-for-everyone.md)，请参阅或[GenerateEmbedUrlForAnonymousUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html)在 *Amazon Quick API 参考*中

# 使用列级别安全性限制对数据集的访问
<a name="restrict-access-to-a-data-set-using-column-level-security"></a>

在 Quick 的企业版中，您可以通过配置列级安全性 (CLS) 来限制对数据集的访问。启用 CLS 的数据集或分析旁边有受限制的 ![\[The lock icon for CLS.\]](http://docs.aws.amazon.com/zh_cn/quick/latest/userguide/images/cls-restricted-icon.png) 符号。默认情况下，所有用户和组都有权访问数据。通过使用 CLS，您可以管理对数据集中特定列的访问权限。

如果您使用的分析或控制面板包含您无权访问的具有 CLS 限制的数据集，则您无法创建、查看或编辑使用受限字段的视觉对象。对于大多数视觉对象类型，如果视觉对象具有您无权访问的受限列，则您无法在分析或控制面板中看到该视觉对象。

表和数据透视表具有不同的行为。如果表或数据透视表在**行**或**列**字段井中使用受限列，而您无权访问这些受限列，则您无法在分析或控制面板中看到该视觉对象。如果表或数据透视表在**值**字段井中具有受限列，则您可以在分析或控制面板中看到该表，其中仅包含您有权访问的值。受限列的值显示为未授权。

要在分析或控制面板上启用列级别安全性，您需要管理员访问权限。

**使用 CLS 创建新分析**

1. 在快速入门页面上，选择**分析**选项卡。

1. 在右上角，选择**新分析**。

1. 选择一个数据集，然后选择**列级别安全性**。

1. 选择要限制的列，然后选择**下一步**。默认情况下，大多数用户和组都有权访问所有列。

1. 选择谁可以访问每列，然后选择**应用**以保存您的更改。

**将现有分析用于 CLS**

1. 在快速入门页面上，选择**数据**选项卡。

1. 在数据页面上，打开您的数据集

1. 在打开的数据集详细信息页面上，对于**列级别安别全性**，选择**设置**。

1. 选择要限制的列，然后选择**下一步**。默认情况下，大多数用户和组都有权访问所有列。

1. 选择谁可以访问每列，然后选择**应用**以保存您的更改。

**使用 CLS 创建控制面板**

1. 在快速导航窗格上，选择**分析**选项卡。

1. 选择要为其创建控制面板的分析。

1. 在右上角，选择**发布**。

1. 选择下列选项之一：
   + 要创建新控制面板，请选择**将新控制面板发布为**，然后为新控制面板输入名称。
   + 要替换现有的控制面板，选择**替换现有控制面板**，然后从列表中选择控制面板。

   此外，您可以选择**高级发布选项**。有关更多信息，请参阅 [发布控制面板](creating-a-dashboard.md)。

1. 选择 **Publish dashboard（发布控制面板）**。

1. （可选）执行以下操作之一：
   + 要发布而不共享某个控制面板，请在出现**与用户共享控制面板**屏幕时选择右上角的 **x**。您可以通过在应用程序栏中选择**共享**来稍后共享该控制面板。
   + 要共享该控制面板，请按照[共享 Amazon 快速浏览控制面板](sharing-a-dashboard.md)中的过程操作。

# 在 Amazon Quick 中以 IAM 角色身份运行查询
<a name="datasource-run-as-role"></a>

您可以对连接至 Amazon Athena、Amazon Redshift 或 Amazon S3 的数据来源使用精细的访问策略，而不是更广泛的权限，从而提高数据安全性。首先，您需要创建一个 AWS Identity and Access Management （IAM）角色，该角色的权限可在人员或 API 开始查询时激活。然后，Quick 管理员或开发人员将 IAM 角色分配给 Athena 或 Amazon S3 数据源。角色到位后，任何运行查询的人员或 API 都拥有运行查询所需的确切权限。

在承诺实施运行身份角色以提高数据安全性之前，需要考虑以下几点：
+ 阐述额外的安全措施为您带来的优势。
+ 与您的 Quick 管理员合作，了解向数据源添加角色是否有助于您更好地实现安全目标或要求。
+ 询问对于涉及的数据来源、人员和应用程序的数量，您的团队能否以可行的方式记录和维护这种类型的安全措施？ 如果不能，那么谁来承担这部分工作？
+ 在结构化组织中，将利益相关者分配到运营、开发和 IT 支持组成的平行团队中。询问他们的经验、建议以及是否愿意支持您的计划。
+ 在启动项目之前，请考虑进行概念验证，让需要访问数据的人员参与其中。

以下规则适用于在 Athena、Amazon Redshift 和 Amazon S3 中使用运行身份角色：
+ 每个数据源只能关联一个 RoleArn。数据来源的使用者（通常会访问数据集和视觉对象）可以生成许多不同类型的查询。该角色对正常工作和无法正常工作的查询设定了界限。
+ ARN 必须与使用它的 Quick 实例 AWS 账户 相同的 IAM 角色对应。
+ IAM 角色必须具有信任关系，允许 Quick 担任该角色。
+ 调用 Quick 的身份 APIs 必须拥有传递角色的权限，然后才能更新`RoleArn`属性。您只需要在创建或更新角色 ARN 时传递角色。之后不会重新评估权限。同样，省略角色 ARN 时不需要权限。
+ 省略角色 ARN 时，Athena 或 Amazon S3 数据来源将使用账户范围的角色和范围缩小策略。
+ 当存在角色 ARN 时，账户范围的角色和任何范围缩小策略都将被忽略。对于 Athena 数据来源，Lake Formation 权限不会被忽略。
+ 对于 Amazon S3 数据来源，必须可以使用 IAM 角色访问清单文件和清单文件指定的数据。
+ ARN 字符串需要与数据 AWS 区域 所在 AWS 账户 和查询位置中的现有 IAM 角色相匹配。

当 Quick 连接到中的其他服务时 AWS，它会使用 IAM 角色。默认情况下，Quick 为其使用的每项服务创建该角色的细化程度较低的版本，该角色由 AWS 账户 管理员管理。当您添加带有自定义权限策略的 IAM 角色 ARN 时，您会为需要额外保护的数据来源覆盖更广泛的角色。有关策略的更多信息，请参阅《IAM 用户指南》中的[创建客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)。

## 使用 Athena 数据来源运行查询
<a name="datasource-run-as-role-athena"></a>

使用 API 将 ARN 附加到 Athena 数据来源。为此，请在的[RoleArn](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RoleArn.html)属性中添加角色 ARN。[AthenaParameters](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AthenaParameters.html)为了进行验证，您可以在**编辑 Athena 数据来源**对话框中查看角色 ARN。但是，**角色 ARN** 是一个只读字段。

首先，您需要一个自定义 IAM 角色，我们在以下示例中对此进行了演示。

请记住，以下代码示例仅用于学习。此示例仅在临时开发和测试环境中使用，不能在生产环境中使用。此示例中的策略不保护任何特定资源，这些资源必须位于可部署策略中。此外，即使是为了开发，您也需要添加自己的 AWS 账户信息。

以下命令创建一个简单的新角色并附加一些向 Quick 授予权限的策略。

```
aws iam create-role \
        --role-name TestAthenaRoleForQuickSight \
        --description "Test Athena Role For QuickSight" \
        --assume-role-policy-document '{
            "Version": "2012-10-17"		 	 	 ,
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "quicksight.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        }'
```

确定或创建用于每个数据源的 IAM 角色后，使用附加策略 attach-role-policy。

```
aws iam attach-role-policy \
        --role-name TestAthenaRoleForQuickSight \
        --policy-arn arn:aws:iam::222222222222:policy/service-role/AWSQuickSightS3Policy1

    aws iam attach-role-policy \
        --role-name TestAthenaRoleForQuickSight \
        --policy-arn arn:aws:iam::aws:policy/service-role/AWSQuicksightAthenaAccess1

    aws iam attach-role-policy \
        --role-name TestAthenaRoleForQuickSight \
        --policy-arn arn:aws:iam::aws:policy/AmazonS3Access1
```



验证权限后，您可以通过创建新角色或更新现有角色在 Quick 数据源中使用该角色。使用这些命令时，请更新 AWS 账户 ID 并 AWS 区域 使其与您自己的 ID 相匹配。

请记住，这些示例代码片段不适用于生产环境。 AWS 强烈建议您为生产案例确定并使用一组最低权限策略。

```
aws quicksight create-data-source
        --aws-account-id 222222222222 \
        --region us-east-1 \
        --data-source-id "athena-with-custom-role" \
        --cli-input-json '{
            "Name": "Athena with a custom Role",
            "Type": "ATHENA",
            "data sourceParameters": {
                "AthenaParameters": {
                    "RoleArn": "arn:aws:iam::222222222222:role/TestAthenaRoleForQuickSight"
                }
            }
        }'
```

## 使用 Amazon Redshift 数据来源运行查询
<a name="datasource-run-as-role-redshift"></a>

将您的 Amazon Redshift 数据与运行身份角色联系起来，从而通过精细的访问策略提高数据安全性。您可以为使用公共网络或 VPC 连接的 Amazon Redshift 数据来源创建运行身份角色。您可以在**编辑 Amazon Redshift 数据来源**对话框中指定要使用的连接类型。Amazon Redshift Serverless 数据来源不支持运行方式角色。

首先，您需要一个自定义 IAM 角色，我们在以下示例中对此进行了演示。以下命令创建示例新角色并附加向 Quick 授予权限的策略。

```
aws iam create-role \
--role-name TestRedshiftRoleForQuickSight \
--description "Test Redshift Role For QuickSight" \
--assume-role-policy-document '{
    "Version": "2012-10-17"		 	 	 ,
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "quicksight.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}'
```

在您确定或创建用于每个数据来源的 IAM 角色后，请使用 `attach-role-policy` 附加策略。如果您要使用的角色附加了 `redshift:GetClusterCredentialsWithIAM` 权限，则 `DatabaseUser` 和 `DatabaseGroups` 的值是可选的。

```
aws iam attach-role-policy \
--role-name TestRedshiftRoleForQuickSight \
--policy-arn arn:aws:iam:111122223333:policy/service-role/AWSQuickSightRedshiftPolicy
    
        
aws iam create-policy --policy-name RedshiftGetClusterCredentialsPolicy1 \
--policy-document file://redshift-get-cluster-credentials-policy.json 


aws iam attach-role-policy \
--role-name TestRedshiftRoleForQuickSight \
--policy-arn arn:aws:iam:111122223333:policy/RedshiftGetClusterCredentialsPolicy1
// redshift-get-cluster-credentials-policy.json
{
    "Version": "2012-10-17"		 	 	 ,
    "Statement": [
        {
            "Sid": "RedshiftGetClusterCredentialsPolicy",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

上面的示例创建了一个使用 `RoleARN`、`DatabaseUser` 和 `DatabaseGroups` IAM 参数的数据来源。如果您只想通过 IAM `RoleARN` 参数建立连接，请将 `redshift:GetClusterCredentialsWithIAM` 权限附加到您的角色，如下例所示。

```
aws iam attach-role-policy \ 
--role-name TestRedshiftRoleForQuickSight \ 
--policy-arn arn:aws:iam:111122223333:policy/RedshiftGetClusterCredentialsPolicy1 // redshift-get-cluster-credentials-policy.json {
    "Version": "2012-10-17"		 	 	 ,
    "Statement": [ 
        {
            "Sid": "RedshiftGetClusterCredentialsPolicy", 
            "Effect": "Allow", 
            "Action": [ "redshift:GetClusterCredentialsWithIAM" ],
            "Resource": [ "*" ]
        }
    ]
}"
```

验证权限后，您可以通过创建新角色或更新现有角色在 Quick 数据源中使用该角色。使用这些命令时，请更新 AWS 账户 ID 和 AWS 区域，使其与您自己的账号 ID 和区域一致。

```
aws quicksight create-data-source \
--region us-west-2 \
--endpoint https://quicksight.us-west-2.quicksight.aws.com/ \
--cli-input-json file://redshift-data-source-iam.json \
redshift-data-source-iam.json is shown as below
{
    "AwsAccountId": "AWSACCOUNTID",
    "DataSourceId": "DATSOURCEID",
    "Name": "Test redshift demo iam",
    "Type": "REDSHIFT",
    "DataSourceParameters": {
        "RedshiftParameters": {
            "Database": "integ",
            "Host": "redshiftdemocluster.us-west-2.redshift.amazonaws.com",
            "Port": 8192,
            "ClusterId": "redshiftdemocluster",
            "IAMParameters": {
                "RoleArn": "arn:aws:iam::222222222222:role/TestRedshiftRoleForQuickSight",
                "DatabaseUser": "user",
                "DatabaseGroups": ["admin_group", "guest_group", "guest_group_1"]
            }
        }
    },
    "Permissions": [
      {
        "Principal": "arn:aws:quicksight:us-east-1:AWSACCOUNTID:user/default/demoname",
        "Actions": [
          "quicksight:DescribeDataSource",
          "quicksight:DescribeDataSourcePermissions",
          "quicksight:PassDataSource",
          "quicksight:UpdateDataSource",
          "quicksight:DeleteDataSource",
          "quicksight:UpdateDataSourcePermissions"
        ]
      }
    ]
}
```

如果您的数据来源使用 VPC 连接类型，请使用以下 VPC 配置。

```
{
    "AwsAccountId": "AWSACCOUNTID",
    "DataSourceId": "DATSOURCEID",
    "Name": "Test redshift demo iam vpc",
    "Type": "REDSHIFT",
    "DataSourceParameters": {
        "RedshiftParameters": {
            "Database": "mydb",
            "Host": "vpcdemo.us-west-2.redshift.amazonaws.com",
            "Port": 8192,
            "ClusterId": "vpcdemo",
            "IAMParameters": {
                "RoleArn": "arn:aws:iam::222222222222:role/TestRedshiftRoleForQuickSight",
                "DatabaseUser": "user",
                "AutoCreateDatabaseUser": true
            }
        }
    },
    "VpcConnectionProperties": { 
      "VpcConnectionArn": "arn:aws:quicksight:us-west-2:222222222222:vpcConnection/VPC Name"
    },
    "Permissions": [
      {
        "Principal": "arn:aws:quicksight:us-east-1:222222222222:user/default/demoname",
        "Actions": [
          "quicksight:DescribeDataSource",
          "quicksight:DescribeDataSourcePermissions",
          "quicksight:PassDataSource",
          "quicksight:UpdateDataSource",
          "quicksight:DeleteDataSource",
          "quicksight:UpdateDataSourcePermissions"
        ]
      }
    ]
}
```

如果您的数据来源使用 `redshift:GetClusterCredentialsWithIAM` 权限，但不使用 `DatabaseUser` 或 `DatabaseGroups` 参数，请向该角色授予对架构中部分或所有表的访问权限。要查看角色是否已被授予对特定表的 `SELECT` 权限，请在 Amazon Redshift 查询编辑器中输入以下命令。

```
SELECT
u.usename,
t.schemaname||'.'||t.tablename,
has_table_privilege(u.usename,t.tablename,'select') AS user_has_select_permission
FROM
pg_user u
CROSS JOIN
pg_tables t
WHERE
u.usename = 'IAMR:RoleName'
AND t.tablename = tableName
```

有关 Amazon Redshift 查询编辑器中的 `SELECT` 操作的更多信息，请参阅 [SELECT](https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_synopsis.html)。

要向角色授予 `SELECT` 权限，请在 Amazon Redshift 查询编辑器中输入以下命令。

```
GRANT SELECT ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA 
schema_name [, ...] } TO "IAMR:Rolename";
```

有关 Amazon Redshift 查询编辑器中的 `GRANT` 操作的更多信息，请参阅 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)。

## 使用 Amazon S3 数据来源运行查询
<a name="datasource-run-as-role-s3"></a>

Amazon S3 数据源包含一个清单文件，Quick 使用该文件来查找和解析您的数据。您可以通过 Quick 控制台上传 JSON 清单文件，也可以提供指向 S3 存储桶中 JSON 文件的 URL。如果您选择提供 URL，则必须授予 Quick 访问在 Amazon S3 中的文件的权限。使用快速管理控制台来控制对清单文件及其引用的数据的访问权限。

借助该**RoleArn**属性，您可以通过覆盖账户范围角色的自定义 IAM 角色授予对清单文件及其引用的数据的访问权限。使用 API 将 ARN 附加到 Amazon S3 数据来源的清单文件。[为此，请在 S3Parameters 的[RoleArn](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RoleArn.html)属性中添加角色 ARN。](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_S3Parameters.html)为了进行验证，您可以在**编辑 S3 数据来源**对话框中查看角色 ARN。但是**角色 ARN** 是只读字段，如以下屏幕截图所示。

首先，请创建一个 Amazon S3 清单文件。然后，您可以在创建新的 Amazon S3 数据集时将其上传到 Amazon Quick，也可以将该文件放入包含您的数据文件的 Amazon S3 存储桶中。查看以下清单文件具体形式的示例：

```
{
    "fileLocations": [
        {
            "URIPrefixes": [
                "s3://quicksightUser-run-as-role/data/"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "textqualifier": "'",
        "containsHeader": "true"
    }
}
```

有关如何创建清单文件的说明，请参阅 [支持的 Amazon S3 清单文件格式](supported-manifest-file-format.md)。

创建清单文件并将其添加到 Amazon S3 存储桶或将其上传到 Quick 后，在 IAM 中创建或更新授予`s3:GetObject`访问权限的现有角色。以下示例说明如何使用 AWS API 更新现有 IAM 角色：

```
aws iam put-role-policy \
    --role-name QuickSightAccessToS3RunAsRoleBucket \
    --policy-name GrantS3RunAsRoleAccess \
    --policy-document '{
        "Version": "2012-10-17"		 	 	 ,
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "s3:ListBucket",
                "Resource": "arn:aws:s3:::s3-bucket-name"
            },
            {
                "Effect": "Allow",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::s3-bucket-name/manifest.json"
            },
            {
                "Effect": "Allow",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::s3-bucket-name/*"
            }
        ]
    }'
```

在您的策略授予 `s3:GetObject` 访问权限后，您可以开始创建将更新后的 `put-role-policy` 应用于 Amazon S3 数据来源清单文件的数据来源。

```
aws quicksight create-data-source --aws-account-id 111222333444 --region us-west-2 --endpoint https://quicksight.us-west-2.quicksight.aws.com/ \
    --data-source-id "s3-run-as-role-demo-source" \
    --cli-input-json '{
        "Name": "S3 with a custom Role",
        "Type": "S3",
        "DataSourceParameters": {
            "S3Parameters": {
                "RoleArn": "arn:aws:iam::111222333444:role/QuickSightAccessRunAsRoleBucket",
                "ManifestFileLocation": {
                    "Bucket": "s3-bucket-name", 
                    "Key": "manifest.json"
                }
            }
        }
    }'
```

验证权限后，您可以通过创建新角色或更新现有角色在 Quick 数据源中使用该角色。使用这些命令时，请务必更新 AWS 账户 ID 并 AWS 区域 与您自己的 ID 相匹配。

# 删除数据集
<a name="delete-a-data-set"></a>

**重要**  
目前，删除数据集的操作是不可撤销的操作，并且会导致不可逆的工作丢失。删除操作不会级联删除从属对象。不过，依赖对象会停止工作，即使您用相同的数据集来替换已删除数据集也是如此。

删除数据集之前，我们强烈建议您先将每个依赖分析或控制面板指向新的数据集。

目前，在依赖视觉对象仍然存在的情况下删除数据集时，包含这些视觉对象的分析和控制面板都无法接受新的元数据。它们仍然可见，但无法正常工作。无法通过添加相同的数据集来修复它们。

这是因为数据集包含的元数据是分析和控制面板不可或缺的组成部分，而分析和控制面板又依赖于该数据集。此元数据是为每个数据集唯一生成的。尽管 Quick Sight 引擎可以读取元数据，但它无法被人类读取（例如，它不包含字段名称）。因此，数据集的精确副本拥有不同的元数据。即使多个数据集共享相同的名称和相同的字段，但每个数据集的元数据是唯一的。

**删除数据集**

1. 请确保某人要继续使用的任何分析或控制面板未使用该数据集。

   在**数据**页面上，选择不再需要的数据集。然后选择右上角的**删除数据集**。

1. 如果您收到一条警告，指示此数据集正在使用中，请跟踪所有依赖分析和控制面板，并将其指向不同数据集。如果该操作不可行，请尝试以下一项或多项最佳实践，而不是将其删除：
   + 重命名数据集，以明确弃用该数据集。
   + 筛选数据，使数据集不包含行。
   + 删除其他人对数据集的访问权限。

   我们建议您通过可以使用的任何方式通知依赖对象所有者该数据集已被启用。还要确保您留出足够的时间，让他们采取相应的措施。

1. 确保在删除数据集后没有依赖对象停止工作，然后选择数据集并选择**删除数据集**。确认您的选择，或选择 **Cancel (取消)**。

**重要**  
目前，删除数据集的操作是不可撤销的操作，并且会导致不可逆的工作丢失。删除操作不会级联删除从属对象。不过，依赖对象会停止工作，即使您用相同的数据集来替换已删除数据集也是如此。

# 向分析中添加数据集
<a name="adding-a-data-set-to-an-analysis"></a>

创建分析之后，您可以将多个数据集添加到分析中。然后，您可以使用它们来创建更多视觉对象。

在分析中，您可以打开任何数据集进行编辑（例如添加或删除字段），或执行其他数据准备。您还可以删除或替换数据集。

当前选定的数据集显示在**数据**窗格顶部。这是当前选定的视觉对象使用的数据集。每个视觉对象只能使用一个数据集。选择其他视觉对象会将选定的数据集更改为该视觉对象使用的数据集。

要手动更改选定的数据集，请选择**数据**窗格顶部的数据集列表，然后选择其他数据集。如果不使用此数据集，此操作会取消选择当前选定的视觉对象。然后，选择使用选定的数据集的视觉对象。或者在**视觉对象**窗格中选择**添加**，以使用所选数据集创建新的视觉对象。

如果您在工具栏上选择**建议**以查看建议的视觉对象，您将看到基于当前选定的数据集的视觉对象。

仅在**筛选条件**窗格中显示当前选定的数据集的筛选条件，并且您只能在当前选定的数据集上创建筛选条件。

**Topics**
+ [替换数据集](replacing-data-sets.md)
+ [从分析中删除数据集](delete-a-data-set-from-an-analysis.md)

使用以下过程将数据集添加到分析中或者编辑分析使用的数据集。

**向分析添加数据集**

1. 在分析页面上，导航到**数据**窗格并展开**数据集**下拉列表。

1. 选择**添加新数据集**以添加数据集。或者，选择**管理数据集**以编辑数据集。有关编辑数据集的更多信息，请参阅 [编辑数据集](edit-a-data-set.md)。

1. 此时将显示数据集的列表。选择数据集，然后选择**选择**。要取消，请选择**取消**。

# 替换数据集
<a name="replacing-data-sets"></a>

在分析中，您可以添加、编辑、替换或删除数据集。使用此部分可以了解如何替换数据集。

在替换数据集时，如果您希望视觉对象按照设计的方式工作，新数据集应具有相似的列。替换数据集还会清除分析的撤销和重做历史记录。这意味着您不能在应用程序栏上使用撤消和重做按钮来浏览更改。因此，决定更改数据集时，您的分析设计应该是稳定的，而不能处于编辑阶段中。

**替换数据集**

1. 在分析页面上，导航到**数据**窗格并展开**数据集**下拉列表。

1. 选择**管理数据集**。

1. 选择要替换的数据集旁边的省略号（三个点），然后选择**替换**。

1. 在**选择替换数据集**页面中，从列表中选择数据集，然后选择**选择**。
**注意**  
替换数据集将清除此分析的撤销和重做历史记录。

数据集将替换为新数据集。字段列表和视觉对象将使用新数据集更新。

此时，您可以选择添加新数据集、编辑新数据集或者使用其他数据集来替换它。选择 **Close (关闭)** 以退出。

## 新数据集不匹配的情况
<a name="replacing-data-sets-2"></a>

在有些情况下，所选替换数据集不包含您的分析中的视觉对象、筛选条件、参数和计算字段使用的所有字段和层次结构。如果是，您将收到来自 Quick Sight 的警告，其中显示了不匹配或缺失的列的列表。

如果发生这种情况，您可以更新两个数据集之间的字段映射。

**更新字段映射**

1. 在**替换数据集不匹配**页面中，选择**更新字段映射**。

1. 在**更新字段映射**页面中，选择要映射的字段的下拉菜单，然后从列表中选择要映射到的字段。

   如果新数据集中缺少该字段，请选择**忽略此字段**。

1. 选择**确认**以确认更新。

1. 选择**关闭**以关闭页面并返回分析。

数据集将替换为新数据集。字段列表和视觉对象将使用新数据集更新。

使用新数据集中现在缺少的字段的任何视觉对象都会更新为空白。您可以向视觉对象中重新添加字段或从分析中删除视觉对象。

如果您在替换数据集之后改变了主意，仍可以恢复。假设您替换了数据集，然后发现更改分析来匹配新数据集太困难。您可以撤销对分析所做的任何更改。然后，您可以用原始数据集或者更加符合分析要求的数据集来替换新数据集。

# 从分析中删除数据集
<a name="delete-a-data-set-from-an-analysis"></a>

使用以下过程从分析中删除数据集。

**从分析中删除数据集**

1. 在分析页面上，导航到**数据**窗格并展开**数据集**下拉列表。

1. 选择**管理数据集**。

1. 选择要替换的数据集旁边的省略号（三个点），然后选择**移除**。如果数据集是分析中的唯一数据集，则无法删除。

1. 选择**关闭**，关闭此对话框。