DirectQuery 部署方案 (SSAS 表格)

本主题提供 DirectQuery 模型的设计和部署过程的详细指南。 可以将 DirectQuery 配置为仅使用关系数据(仅 DirectQuery),也可以将模型配置为仅使用缓存数据或仅关系数据(混合模式)。 本主题介绍这两种模式的实现过程,并介绍查询结果中可能的差异,具体取决于模式和安全配置。

设计和部署步骤

比较 DirectQuery 配置

设计和部署步骤

步骤 1. 创建解决方案

无论使用哪种模式,都必须查看描述 DirectQuery 模型中的数据限制的信息。 例如,模型和报表中使用的所有数据都必须来自单个 SQL Server 数据库。 有关详细信息,请参阅 DirectQuery 模式(SSAS 表格)。

此外,请查看度量值和计算列的限制,并确定要使用的公式是否与 DirectQuery 模式兼容。 可能需要删除或修改以下元素:

  • 不支持计算列。

  • 不能使用复制粘贴的数据。 如果导入 PowerPivot 模型以启动解决方案,请确保在导入解决方案之前删除链接表,因为无法删除此数据,并会阻止 DirectQuery 验证。

步骤 2. 在模型设计器中启用 DirectQuery 模式

默认情况下,DirectQuery 处于禁用状态。 因此,必须将设计环境配置为支持 DirectQuery 模式。

在解决方案资源管理器中右键单击 Model.bim 节点,并将属性 DirectQuery 模式设置为 On

可以随时打开 DirectQuery;但是,为了确保不要创建与 DirectQuery 模式不兼容的列或公式,建议从头开始启用 DirectQuery 模式。

最初,即使是 DirectQuery 模型也始终在内存中创建。 工作区数据库的默认查询模式也设置为 DirectQuery 使用内存。 此混合工作模式允许你在模型设计过程中使用导入数据的缓存来提高性能,同时根据 DirectQuery 要求验证模型。

步骤 3. 解析验证错误

如果在打开 DirectQuery 或添加新数据或公式时收到验证错误,请打开 Visual Studio 错误列表,然后执行所需的作。

  • 更改 DirectQuery 模式的任何必需属性设置,如错误消息中所述。

  • 删除计算列。 如果需要特定度量值的计算列,可以始终使用表导入向导中提供的关系查询设计器 (SSAS)来创建列。

  • 修改或删除与 DirectQuery 模式不兼容的公式。 如果需要特定函数进行计算,请考虑使用 Transact-SQL 提供等效方法。

  • 根据需要添加数据。 如果模型以前使用 SQL Server 以外的提供程序复制粘贴数据或数据,则可以在现有连接内创建新的视图和派生列,或使用分布式查询。 DirectQuery 模型中使用的所有数据都必须通过单个 SQL Server 数据源进行访问。

步骤 4. 设置用于在模型上应答查询的首选方法

仅限 DirectQuery 将属性设置为 DirectQuery
混合模式 将属性设置为 In-Memory With DirectQueryDirectQuery With In-Memory

稍后可以更改此值以使用不同的首选项。

请注意,客户端可以替代连接字符串中的首选方法。

步骤 5. 指定 DirectQuery 分区

仅限 DirectQuery 可选。 仅 DirectQuery 模型不需要分区。

但是,如果在设计阶段在模型中创建了分区,请记住,只能使用一个分区作为数据源。 默认情况下,创建的第一个分区将用作 DirectQuery 分区。

若要确保模型所需的所有数据都可以从 DirectQuery 分区获取,请选择 DirectQuery 分区并编辑 SQL 语句以获取整个数据集。
混合模式 如果模型中的任何表具有多个分区,则必须选择单个分区作为 DirectQuery 分区。 如果未分配分区,则默认情况下,创建的第一个分区将用作 DirectQuery 分区。

设置除 DirectQuery 以外的所有分区的处理选项。 通常从不处理 DirectQuery 分区,因为数据是从关系源传递的。

有关详细信息,请参阅分区和 DirectQuery 模式(SSAS 表格)。

步骤 6. 配置身份模拟

DirectQuery 模型仅支持身份模拟。 模拟选项“ 模拟设置”定义查看指定 SQL Server 数据源中的数据时使用的凭据。

仅限 DirectQuery 对于 “模拟设置” 属性,请指定将用于连接到 SQL Server 数据源的帐户。

如果使用值 ImpersonateCurrentUser,则承载模型的 Analysis Services 实例会将模型的当前用户的凭据传递给 SQL Server 数据库。
混合模式 对于 “模拟设置” 属性,指定将用于访问 SQL Server 数据源中的数据的帐户。

此设置不会影响用于处理模型使用的缓存的凭据。

步骤 7. 部署模型

准备好部署模型时,打开 Visual Studio 的 “项目 ”菜单,然后选择“ 属性”。 将 QueryMode 属性设置为下表中所述的值之一:

有关详细信息,请参阅“从 SQL Server Data Tools 部署”(SSAS 表格)。

仅限 DirectQuery DirectQueryOnly

由于只指定了直接查询,因此模型元数据将部署到服务器,但未处理模型。

请注意,工作区数据库使用的缓存不会自动删除。 如果要确保用户无法看到缓存的数据,你可能希望清除设计时缓存。 有关详细信息,请参阅 “清除 Analysis Services 缓存”。
混合模式 具有内存中的 DirectQuery

In-Memory 使用 DirectQuery

这两个值都允许根据需要使用缓存或关系数据源。 该顺序定义在回答针对模型的查询时默认使用的数据源。

在混合模式下,缓存必须同时处理模型元数据部署到服务器。

部署后,可以更改此设置。

步骤 8。 验证已部署的模型

在 SQL Server Management Studio 中,打开部署模型的 Analysis Services 实例。 右键单击数据库的名称,然后选择“ 属性”。

  • 定义部署属性时设置了属性 DirectQueryMode

  • 定义用户模拟选项时,属性“数据源模拟信息”已被设置。 有关详细信息,请参阅“设置模拟选项”(SSAS - 多维)。

  • 部署模型后,可以随时更改这些属性。

比较 DirectQuery 选项

仅限 DirectQuery
如果希望保证单个数据源,或者数据太大而无法容纳内存,则首选此选项。 如果使用非常大的关系数据源,请在设计时使用某些数据子集来创建模型。 在仅 DirectQuery 模式下部署模型时,可以编辑数据源定义以包含所有必需的数据。

如果要使用关系数据源提供的安全性来控制用户对数据的访问,则此选项也是首选选项。 使用缓存表格模型,还可以使用 Analysis Services 角色来控制数据访问,但缓存中存储的数据也必须受到保护。 如果安全上下文要求永远不应缓存数据,则应始终使用此选项。

下表描述了 DirectQuery 仅模式的可能部署结果:

没有缓存的 DirectQuery 不会将数据加载到缓存中。 该模型永远无法被处理。

只能通过使用支持 DAX 查询的客户端来查询模型。 始终从原始数据源返回查询结果。

DirectQueryMode = On

QueryMode = DirectQuery
仅针对缓存的查询的 DirectQuery 部署失败。 不支持此配置。

DirectQueryMode = On

QueryMode = 内存中

混合模式
在混合模式下部署模型具有许多优点:如果需要,可以从 SQL Server 数据源获取 up-to日期数据,但保留缓存可让你在设计报表或测试模型时更快地处理内存中的数据,以获得更快的性能。

如果模型非常大,DirectQuery 混合模式也很有用。 在处理缓存时,你可以将模型切换到 DirectQuery 模式,而不是让用户获取过时的数据,或者让模型在处理过程中不可用。 用户的性能可能略慢,但能够直接从关系存储获取数据,确保结果 up-to日期。

下表比较了 DirectQuery 选项的每个组合中的部署结果。

混合模式,优先使用缓存 可以处理模型,数据可以加载到缓存中。 默认情况下,查询使用缓存。 如果客户端想要使用 DirectQuery 源,则必须在连接字符串中插入参数。

DirectQueryMode = On

QueryMode = 使用 DirectQueryIn-Memory
首选 DirectQuery 的混合模式 处理模型,数据可以加载到缓存中。 但是,默认情况下,查询使用 DirectQuery。 如果客户端想要使用缓存的数据,则必须在连接字符串中插入参数。 如果模型中的表已分区,则缓存的主体分区也设置为 In-Memory 与 DirectQuery

DirectQueryMode = On

QueryMode = 具有内存中的 DirectQuery

另请参阅

DirectQuery 模式 (SSAS 表格)
表格模型数据访问