在 SSMS 中启用 DirectQuery 模式

适用于: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

可以更改已部署的表格模型的数据访问属性,启用 DirectQuery 模式,其中查询针对后端关系数据源执行,而不是针对驻留在内存中的缓存数据执行。

重要

建议在 Visual Studio 中使用表格模型设计器而不是SQL Server Management Studio (SSMS) 来切换数据存储模式。 使用 Visual Studio 更改模型模式,然后随后部署到服务器时,模型和数据库保持同步。此外,通过更改模型中的存储模式,可以查看发生的任何验证错误。 如本文所述使用 SSMS 时,不会报告验证错误。

要求

在表格模型上启用 DirectQuery 模式是一个多步骤过程:

  • 确保模型没有可能导致 DirectQuery 模式下验证错误的功能,然后将模型的数据存储模式从内存中更改为 DirectQuery。

    DirectQuery 模式下记录了功能限制列表。

  • 查看已部署的数据库用于从后端外部数据库检索数据的连接字符串和凭据。 确保只有一个连接,且其设置适合执行查询。

    不是专为 DirectQuery 设计的表格数据库可能有多个连接,这些连接现在需要根据 DirectQuery 模式的要求削减成一个。

    最初用于处理数据的凭据现在将用于查询数据。 在 DirectQuery 配置过程中,请查看帐户情况并在可能情况下对帐户进行更改,以便使用不同的帐户来执行各种专用操作。

    Analysis Services 仅在 DirectQuery 模式下执行受信任委派。 如果你的解决方案要求通过委派来获取特定于用户的查询结果,则必须允许用于连接到后端数据库的帐户来委派提出请求的用户的标识,而用户标识则必须具有对后端数据库的读取权限。

  • 最后一步是通过执行查询来确认 DirectQuery 模式是可以操作的。

切换到 DirectQuery 模式

  1. 在“对象资源管理器”中,右键单击数据库>“属性”“>模型>默认模式”。

  2. 将模式设置为“DirectQuery”。

    有效值 说明
    DirectQuery 将针对后端关系数据库来执行查询,使用的数据源连接是为模型定义的。

    系统会将对模型进行的查询转换为本机数据库查询,并将其重定向到数据源。

    处理已设置为 DirectQuery 模式的模型时,仅编译和部署元数据。 数据本身是在模型外部,位于操作性数据源的数据库文件中。
    导入 将按 MDX 或 DAX 格式针对表格数据库来执行查询。

    处理设置为“导入模式”的模型时,数据将从后端数据源检索并存储在磁盘上。 加载数据库时,会将数据整个复制到内存中进行极快速的表扫描和查询。

    这是表格模型的默认模式,是某些(非关系)数据源的唯一模式。
    允许 Import 和 DirectQuery。 Azure Analysis Services或Power BI Premium不支持此模式。

检查连接属性

切换为 DirectQuery 可能会更改连接的安全上下文,具体取决于数据源连接的设置情况。 更改数据访问模式时,请查看模拟和连接字符串属性,确保登录名可以用于连接到后端数据库。

查看 Configure Analysis Services for Kerberos constrained delegation 中的 配置 Analysis Services 以实现可信委托 部分,了解针对 DirectQuery 方案委派用户身份时的背景信息。

  1. 在对象资源管理器中,展开“连接”,然后双击某个连接以查看其属性。

    使用 DirectQuery 模型时,只应为数据库定义一个连接,数据源必须是关系数据源,且类型必须是支持的数据库类型。 请参阅 支持的数据源

  2. 连接字符串 :应指定在 DirectQuery 操作中使用的服务器、数据库名称和身份验证方法。 如果使用 SQL Server 身份验证,则可在此处指定数据库登录名。

  3. 模拟信息 :用于 Windows 身份验证。 适用于表格模型的 DirectQuery 模式的选项包括:

    • 使用服务帐户。 如果 Analysis Services 服务帐户具有对关系数据库的读取权限,则可选择此选项。

    • 使用特定的用户名和密码。 指定 Windows 用户帐户,该帐户具有对关系数据库的读取权限。

请注意,这些凭据仅用于响应针对关系数据存储区的查询;它们与用于处理混合模型的缓存的凭据不同。

当模型仅用于内存中时,不能使用模拟。 ImpersonateCurrentUser设置无效,除非模型正在使用 DirectQuery 模式。

验证 DirectQuery 访问权限

  1. 在连接到 SQL Server 上的关系数据库的 Management Studio 中使用 SQL Server Profiler 或 xEvents 启动一个跟踪。

    如果你使用的是 Oracle 或 Teradata,请使用适合这些数据库平台的跟踪工具。

  2. 在 Management Studio 中,输入并执行简单的 MDX 查询,例如 select <some measure> on 0 from model.

  3. 在跟踪中,你会看到针对关系数据库执行查询的证据。

另请参阅

兼容性级别
支持的数据源
扩展的事件