在 Power BI 语义模型中,表的存储模式取决于其数据源。 可以使用存储模式来控制 Power BI 是在报表的内存中存储表数据,还是在视觉对象加载时从数据源中检索数据。
本文介绍各种表存储模式,并介绍了它们如何影响报表行为。
表存储模式
| 表存储模式 | 可用时 | 优点 | 注释 |
|---|---|---|---|
| Import | 在 Power BI Desktop 和 Power BI Web 建模中,选择 “获取数据 ”并使用 Power Query 时,几乎适用于所有数据源。 | 数据的快照存储在本机存储中,以便快速加载报表中的视觉对象。 | 若要从数据源获取最新数据,请刷新语义模型或表。 |
| OneLake 上的 Direct Lake | 在 Power BI Desktop 和 Power BI Web 建模中,选择 OneLake 目录时,对于 Microsoft Fabric 数据源。 | 从 Microsoft OneLake 增量表扫描数据,以便快速加载报表中的视觉对象。 | 默认情况下,加载最新数据。 若要通过手动刷新来访问最新数据,请在计划的刷新设置页中关闭自动同步。 刷新也称为 Direct Lake 的重新构建 。 有关 Direct Lake 的详细信息,请参阅 Direct Lake 概述。 |
| SQL 上的 Direct Lake | 选择 “新建语义模型”时,在 Fabric 项的 SQL 分析终结点中。 | 从 OneLake 的 Delta 表中扫描数据,以便更高效地加载到报表中。 | 在此模式下,Power BI 使用 DirectQuery 存储模式访问以下情况下的数据: - 使用视图。 - 启用了 SQL 粒度访问。 - 到达 Direct Lake 护栏。 |
| DirectQuery | 在 Power BI Desktop 中,对于某些数据源(例如 SQL 数据库),选择 “获取数据 ”并使用 Power Query。 | 当视觉对象加载且未存储在语义模型中时,将从数据源查询数据。 | 该查询是从 Power BI 数据分析表达式(DAX)查询(DAX)查询(视觉对象)转换为数据源的本机查询语言(例如 SQL 查询)的翻译。 |
| Power BI 语义模型中的 DirectQuery | 在 Power BI Desktop 中,连接到 Power BI 语义模型,然后选择“ 对此模型进行更改”或“导入”或“DirectQuery”表已添加时。 | 来自新模型的 DAX 查询在源模型上运行,并且可以使用这两者中的度量值。 可以在新模型中重写远程模型上的某些列属性。 此自定义包括格式字符串和显示名称。 | 需要对特定报表的现有语义模型进行少量更改时,请使用此存储模式。 |
| Dual | 在 Power BI Desktop 中,将 DirectQuery 表转换为导入模式时。 此时会显示一个对话框,其中包含用于将其余 DirectQuery 表转换为双模式的选项。 | DirectQuery 和 Import 表之间的关系受到限制。 从 DirectQuery 切换到双模式有助于保持这些关系正常。 | |
| 混合 | 在导入表的增量刷新方案中。 表的最新分区可以处于 DirectQuery 模式,以帮助确保导入刷新之间提供最新数据。 | 分区创建和管理是自动化的,以减少需要刷新的数据量。 | 有关详细信息,请参阅 为 Power BI 语义模型配置增量刷新和实时数据。 |
注释
在以下情况下使用实时连接模式:
- 连接到 Power BI Desktop 中的 Power BI 语义模型以创建报表
- 从 Web 中的 Power BI 语义模型创建报表
Live connect 报表没有本地语义模型,有时称为 精简报表。 远程 Power BI 语义模型可以使用任何表存储模式。 作为报表作者,可以在 模型 视图中查看模型,但只有有限的信息可用。 你创建的度量值存储在报表中。
复合语义模型是具有多个存储模式的表的语义模型。 有关详细信息,请参阅 Power BI 中使用复合模型。
查看表的存储模式
每个表都有一个 Storage mode 属性。 若要查看表的存储模式,请执行以下步骤:
对于大多数表,只能在添加表时设置存储模式。 只有在创建表处于 DirectQuery 模式或 OneLake 上的 Direct Lake 模式时,才能更改存储模式:
- 可以将 DirectQuery 表更改为导入表或双表。 设置此属性后,无法将模式设置回 DirectQuery。 Power BI Web 建模和 Power BI Desktop 中的实时编辑除外。 这些环境都具有版本控制,可用于反向更改的存储模式。
- 可以在 Fabric 笔记本中使用语义链接实验室将 OneLake 上的 Direct Lake 表转换为导入表。
DirectQuery 和双重表的约束
双表的功能约束与 DirectQuery 表相同。 这些约束包括计算列中的有限 M 转换和受限的 DAX 函数。 有关详细信息,请参阅 DirectQuery 限制。
双重设置的传播
请考虑以下模型。 所有表都来自支持 Import 和 DirectQuery 模式的单个源。
假设此模型中的所有表最初都设置为 DirectQuery。 如果将 SurveyResponse 表的存储模式更改为 “导入”,将显示以下警告窗口:
可以将维度表、 Customer、 Geography 和 Date 设置为“双”模式,以减少语义模型中有限关系的数量,并帮助提高性能。 有限关系通常涉及至少一个 DirectQuery 表,其中 JOIN 逻辑无法推送到源系统。 由于“Dual”表可以作为“DirectQuery”或“Import”表发挥作用,因此避免了这种情况。
传播逻辑旨在帮助包含多个表的模型。 假设你有一个包含 50 个表的模型,并且只需要缓存某些事实(事务性)表。 Power BI Desktop 中的逻辑计算必须设置为双模式的最小维度表集,因此无需这样做。
传播逻辑仅遍历到一对多关系的 一 端。
存储模式使用示例
请考虑涉及下表和存储模式的示例:
| Table | 存储模式 |
|---|---|
| Sales | DirectQuery |
| SurveyResponse | Import |
| 日期 | Dual |
| 客户 | Dual |
| 地理 | Dual |
如果 Sales 表具有大量数据,则使用这些存储模式会导致以下行为:
Power BI Desktop 缓存维度表、 日期、 客户和 地理位置,以帮助在检索要显示的切片器值时减少初始报表的加载时间。
Power BI Desktop 不缓存 Sales 表。
- 不缓存此表有助于改善数据刷新时间并减少内存消耗。
- 基于 Sales 表的报表查询在 DirectQuery 模式下运行。 这些查询所需的时间可能比导入查询长。 但是 DirectQuery 查询的结果更接近实时结果,因为不会引入缓存延迟。
基于 SurveyResponse 表的报表查询相对较快,因为它们是从内存中缓存返回的。
命中或错过缓存的查询
可以使用 SQL Server Profiler 查看哪些查询命中或错过内存中缓存。 如果将此工具连接到 Power BI Desktop 的诊断端口,则可以执行基于以下事件的跟踪:
- 查询事件\查询开始
- 查询处理\Vertipaq SE 查询开始
- 查询处理\DirectQuery Begin
对于每个 Query Begin 事件,请检查具有相同 ActivityID 值的其他事件。 例如,如果没有 DirectQuery Begin 事件,但存在 Vertipaq SE Query Begin 事件,则会从缓存中应答查询。
如果可能,引用双表的查询会从缓存返回数据。 否则,它们将还原到 DirectQuery 模式。
请考虑几个引用上一部分中表的 DAX 查询。 例如,以下查询仅引用处于双模式的 Date 表中的列。 因此,查询应命中缓存:
以下查询仅引用 Sales 表中处于 DirectQuery 模式的列。 因此, 它不应 命中缓存:
以下查询很有趣,因为它合并了这两列。 此查询不会命中缓存。 你可能最初希望从缓存中检索 CalendarYear 值,并从源中检索 SalesAmount 值,然后合并结果。 但此方法的效率低于将或SUMGROUP BY作提交到源系统。 如果源执行该作,则每年仅返回销售额的总和。 该结果可能包含的行数可能比返回所有 SalesAmount 值要少得多。
注释
当缓存表与未缓存的表组合在一起时,此行为不同于 Power BI Desktop 中的 多对多关系 。
使缓存保持同步
上一部分中的查询显示,双表有时会命中缓存,有时不命中。 因此,从过期缓存返回的值可能与从源返回的值不同。 查询执行不会尝试屏蔽数据问题,例如,筛选 DirectQuery 结果以匹配缓存的值。 你有责任了解数据流,应该相应地进行设计。 如有必要,可以在源头使用一些已建立的技术来处理这种情况。
双存储模式是性能优化。 应仅以不损害满足业务需求的能力的方式使用它。 对于替代行为,请考虑使用 Power BI Desktop 中了解多对多关系中所述的技术。
表视图
如果语义模型中至少有一个表具有“导入”或“双”存储模式,则 Power BI 表 视图选项卡可用。
在表视图中选择“双”表或“导入 ”表 时,将显示其缓存的数据。 DirectQuery 表不显示任何数据。 相反,将显示一条消息,指出无法显示 DirectQuery 表。
注意事项和限制
表存储模式和复合模型中某些模式的使用目前存在一些限制:
以下实时连接(多维)源不能与复合模型一起使用:
- SAP HANA
- SAP Business Warehouse
使用 DirectQuery 模式连接到这些多维源时,无法连接到其他 DirectQuery 源或将其与导入的数据合并。
使用复合模型时,使用 DirectQuery 模式的限制仍然适用。 其中许多限制适用于表级别,具体取决于表的存储模式。 例如,导入表上的计算列可以引用其他表,但 DirectQuery 表中的计算列只能引用同一表中的列。 如果模型中的任何表处于 DirectQuery 模式,则其他限制适用于整个模型。
相关内容
有关复合模型和 DirectQuery 模式的详细信息,请参阅以下文章: