Power BI 语义模型中的表存储模式

在 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 属性。 若要查看表的存储模式,请执行以下步骤:

  1. “模型” 视图中,选择该表。

  2. “属性 ”窗格中,展开“ 高级 ”部分,然后展开 “存储模式 ”列表。

    Power BI Desktop 中模型视图的屏幕截图。突出显示了一个表。在“属性”下,“存储模式”列表将展开并突出显示。

对于大多数表,只能在添加表时设置存储模式。 只有在创建表处于 DirectQuery 模式或 OneLake 上的 Direct Lake 模式时,才能更改存储模式:

  • 可以将 DirectQuery 表更改为导入表或双表。 设置此属性后,无法将模式设置回 DirectQuery。 Power BI Web 建模和 Power BI Desktop 中的实时编辑除外。 这些环境都具有版本控制,可用于反向更改的存储模式。
  • 可以在 Fabric 笔记本中使用语义链接实验室将 OneLake 上的 Direct Lake 表转换为导入表。

DirectQuery 和双重表的约束

双表的功能约束与 DirectQuery 表相同。 这些约束包括计算列中的有限 M 转换和受限的 DAX 函数。 有关详细信息,请参阅 DirectQuery 限制

双重设置的传播

请考虑以下模型。 所有表都来自支持 Import 和 DirectQuery 模式的单个源。

Power BI Desktop 模型视图的屏幕截图,其中显示了五个表之间的关系:Date、Sales、SurveyResponse、Customer 和 Geography。

假设此模型中的所有表最初都设置为 DirectQuery。 如果将 SurveyResponse 表的存储模式更改为 “导入”,将显示以下警告窗口:

描述将存储模式更改为导入效果的窗口的屏幕截图,其中提供了将维度表设置为双模式的选项。

可以将维度表、 CustomerGeographyDate 设置为“双”模式,以减少语义模型中有限关系的数量,并帮助提高性能。 有限关系通常涉及至少一个 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 表中的列。 因此,查询应命中缓存:

显示引用 Date 表的查询文本的屏幕截图。

以下查询仅引用 Sales 表中处于 DirectQuery 模式的列。 因此, 它不应 命中缓存:

显示引用 Sales 表的查询文本的屏幕截图。

以下查询很有趣,因为它合并了这两列。 此查询不会命中缓存。 你可能最初希望从缓存中检索 CalendarYear 值,并从源中检索 SalesAmount 值,然后合并结果。 但此方法的效率低于将或SUMGROUP BY作提交到源系统。 如果源执行该作,则每年仅返回销售额的总和。 该结果可能包含的行数可能比返回所有 SalesAmount 值要少得多。

显示引用 Date 表和 Sales 表的查询文本的屏幕截图。

注释

当缓存表与未缓存的表组合在一起时,此行为不同于 Power BI Desktop 中的 多对多关系

使缓存保持同步

上一部分中的查询显示,双表有时会命中缓存,有时不命中。 因此,从过期缓存返回的值可能与从源返回的值不同。 查询执行不会尝试屏蔽数据问题,例如,筛选 DirectQuery 结果以匹配缓存的值。 你有责任了解数据流,应该相应地进行设计。 如有必要,可以在源头使用一些已建立的技术来处理这种情况。

双存储模式是性能优化。 应仅以不损害满足业务需求的能力的方式使用它。 对于替代行为,请考虑使用 Power BI Desktop 中了解多对多关系中所述的技术。

表视图

如果语义模型中至少有一个表具有“导入”或“双”存储模式,则 Power BI 视图选项卡可用。

Power BI Desktop 中表视图的屏幕截图。“表视图”图标突出显示,并且表中会显示多行数据。

在表视图中选择“双”表或“导入 ”表 时,将显示其缓存的数据。 DirectQuery 表不显示任何数据。 相反,将显示一条消息,指出无法显示 DirectQuery 表。

注意事项和限制

表存储模式和复合模型中某些模式的使用目前存在一些限制:

以下实时连接(多维)源不能与复合模型一起使用:

  • SAP HANA
  • SAP Business Warehouse

使用 DirectQuery 模式连接到这些多维源时,无法连接到其他 DirectQuery 源或将其与导入的数据合并。

使用复合模型时,使用 DirectQuery 模式的限制仍然适用。 其中许多限制适用于表级别,具体取决于表的存储模式。 例如,导入表上的计算列可以引用其他表,但 DirectQuery 表中的计算列只能引用同一表中的列。 如果模型中的任何表处于 DirectQuery 模式,则其他限制适用于整个模型。

有关复合模型和 DirectQuery 模式的详细信息,请参阅以下文章: