在Power BI中,进行数据连接的时候,"实时连接(Live Connection)"和"DirectQuery"这两个概念很容易被混淆,主要有以下两个原因:
- 概念相似性:两者都涉及与数据源的实时交互。
- 术语差异:其他BI工具常用"实时连接"指代Power BI中的DirectQuery模式。
我们今天就一起看下 实时连接和DirectQuery 这两个术语之间的区别。
Power BI 语义模型、AAS 和 SSAS
首先我们要了解的是,当 Power BI 报表在运行时,只能从Power BI 语义模型(Power BI数据集)、Azure Analysis Services (AAS) 数据库或 SQL Server Analysis Services (SSAS)的本地实例 之一获取数据。
1、Power BI 语义模型(Power BI数据集)
由 Power BI Desktop 创建并发布至 Power BI 服务的分析模型,本质是托管在 Power BI 服务中的 Analysis Services 引擎实例。
2. Azure Analysis Services (AAS)
云托管的企业级分析服务数据库,需要通过网关连接本地数据源进行数据刷新。
3. SQL Server Analysis Services (SSAS)
本地部署的分析服务实例,通过网关实现云端报表访问本地模型。
这三个源运行着的都是同一引擎(即 Analysis Services 引擎)的变体,并且可以在 DAX 中进行查询。当用户与Power BI报表进行交互时,所有的数据请求都会发送到所连接的Analysis Services引擎实例(无论是Power BI语义模型、AAS还是SSAS)。
实时连接
通常,当我们打开 Power BI Desktop 并进行开发时,我们的 .pbix 文件包含 Power BI 语义模型(Power BI数据集)和连接到该语义模型的报表。发布这个 .pbix 文件时,它们就会拆分,可以在 Power BI 工作区中看到单独的数据集和报表对象,如下图。
在 Power BI Desktop 中选择报表数据源的时候,可以选择连接到已发布到 Power BI 工作区的 Power BI 语义模型、AAS 或 SSAS 的实例,这样不同的开发人员就可以同时处理语义模型/AAS 数据库/SSAS 数据库和报表。
如果从 Power BI Desktop 连接到已发布的语义模型、 AAS 或 SSAS 数据库时,就会创建实时连接,具体的步骤如下:
- 连接到已发布的 Power BI 数据集并创建实时连接:点击"获取数据" → 选择"Power BI 语义模型",进行连接。
- 创建与 AAS 或 SSAS 的实时连接:点击"获取数据" → 选择"Analysis Services"源,然后确保选择“实时连接”选项。
需要注意的一点就是,实时连接的概念仅在 Power BI Desktop 中才有意义。当创建好实时连接时,我们的 .pbix 文件就不再包含Power BI语义模型(Power BI数据集) 了,它只包含一个报表。
那么问题来了,对于实时连接的报表而言,通过Power BI Desktop 重新发布报表至Power BI 工作区,会怎样呢?
- 如果你的报表已经通过实时连接到已发布到Power BI 工作区的 Power BI 数据集,后边再重新发布报表,那么 Power BI 工作区中只会对报表进行更新。
- 如果发布的报表所连接的数据源是 AAS 或 SSAS 的实时连接,后边再重新发布报表,在 Power BI 工作区中会看到一个新数据集和一个新的报表,但这个并不是真正的数据集,它实际上只是指向实际保存数据的 AAS 或 SSAS 数据库的指针。
DirectQuery 模式
Power BI 数据集、AAS 数据库或 SSAS 表格数据库可以通过两种基本方式处理数据:Import模式和 DirectQuery 模式。在 Import 模式下,数据集所需的数据将复制到数据集中并存储在其中。在 DirectQuery 模式下,如果用户进行一些操作,对Power BI 报表运行 DAX 查询,那从数据集请求数据的时侯,会生成查询,这些查询将在数据源上运行,以按需获取所需的数据进而渲染更新可视化组件,可以按照下边的链路查询理解:
用户操作,触发DAX查询 ->> 数据集引擎: 提交DAX ->> 源数据库: 转换原生SQL -->>数据集引擎: 返回结果集 ->> 可视化组件: 渲染更新
再举一个例子,如果我的数据源是 SQL Server 数据库,那么 Power BI 将会生成 SQL 查询以获取所需的数据,当然对于其他源,它可能会生成其他查询语言的进行查询。总之,Power BI 数据集始终是一个语义层,是 BI 数据的易用接口。
这里需要理解的关键是,“DirectQuery 模式”描述了数据集数据的保存位置,即数据集外部,而不是在导入模式下的数据集内部。
关于复合模型
Power BI 的复合模型(Composite Model)允许在单个Power BI语义模型中灵活组合多种数据连接方式,具体表现为:
1、混合存储模式
单个 Power BI 语义模型里边的不同表可以选择不同的存储模式,也就是可在同一数据集内有些表可以处于Import模式,有些可以处于 DirectQuery 模式。
2、多源DirectQuery
不同DirectQuery表可以分别连接至完全不同的数据源(如SQL Server+Oracle),并保持各自独立的实时查询链路。
结论
实时连接和 DirectQuery 模式是两个不同的概念。在 Power BI Desktop 中创建连接到已发布的 Power BI 数据集、AAS 数据库或 SSAS 数据库的报表时,将发生实时连接。
DirectQuery 模式是 Power BI 数据集处理数据的两种基本方式之一(另一种是导入模式),在这种模式下,数据集并不包含任何数据,而是通过其他数据源进行所需的查询。