Power BI 微课堂 | 第24课:在 Power BI Desktop 中管理存储模式

published: 2024-02-22

今天,我们开始学习:在 Power BI Desktop 中管理存储模式,了解存储模式的各种属性设置选项及其相关优势。


》存储模式简介

在 Microsoft Power BI Desktop 中,我们可以指定表的存储模式。借助存储模式,可以控制 Power BI Desktop 是否将表数据缓存到报表内存中,这意味着可暂时将数据存储在内存中。

设置存储模式带来了许多优势,比如可为模型中的每个表单独设置存储模式,如此就实现了单一语义模型,并带来以下优势:

  • 优势一:查询性能。当用户与 Power BI 报表中的视觉对象交互时,数据分析表达式 (DAX) 查询会被提交到语义模型。通过正确设置存储模式将数据缓存到内存中,可提升报表的查询性能和交互性。

  • 优势二:大型语义模型。未缓存表不会出于缓存目的占用内存。我们可以对大型语义模型启用交互式分析,这些语义模型因过大或过于昂贵而无法完全缓存到内存中。此外,还可以选择哪些表值得缓存,而哪些不值得。

  • 优势三:数据刷新优化。无需刷新未缓存的表。我们可以只缓存满足服务级别协议和业务需求所需的数据,从而减少刷新次数。

  • 优势四:准实时需求。不进行缓存可能会让具有准实时需求的表受益,从而减少数据延迟。

  • 优势五:写回。借助写回,业务用户可以更改单元格值,从而探索模拟方案。自定义应用程序可将更改应用到数据源。未缓存表可以立即显示更改,可便于执行即时效果分析。

Power BI Desktop 存储模式设置与以下功能相关:

  • 复合模型:允许报表有任意组合的两个或多个数据连接,包括 DirectQuery 连接或“导入”。

  • 多对多关系:借助复合模型,可以在表之间建立多对多关系 。在多对多关系中,删除了对表中唯一值的要求。它还删除了旧解决办法,如为建立关系而仅引入新表。

  • 存储模式:借助数据模型,可以指定哪些视觉对象需要查询后端数据源。导入的是不需要查询的视觉对象,即使基于 DirectQuery,也不例外。此功能有助于提升性能,并减少后端负载。以前,甚至是切片器等简单视觉对象,也会启动发送至后端源的查询。


》使用存储模式属性

“存储模式”属性是可在模型中的每个表上设置的属性,可用于控制 Power BI 如何缓存表数据。我们可通过两种方法设置“存储模式”属性,或查看其当前设置 :

在“模型”视图中,选择要查看或设置其属性的表。

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

如上图所示,“存储模式”属性设置提供了以下三个选项:

  • 导入:缓存具有此设置的导入表。如果查询提交到 Power BI 语义模型,且返回“导入”模式表数据,那么就只能通过缓存数据完成。

  • DirectQuery:不会缓存具有此设置的表。如果查询提交到 Power BI 语义模型(例如 DAX 查询),且返回 DirectQuery 表数据,那么就只能通过对数据源执行按需查询完成。提交到数据源的查询使用相应数据源的查询语言(例如 SQL)。

  • 双重:具有此设置的表可充当缓存表,也可以充当未缓存表,具体视提交到 Power BI 语义模型的查询的上下文而定。在一些情况下,查询是通过缓存数据完成。在另一些情况下,查询是通过对数据源执行按需查询完成。请注意,将表的“存储模式”更改为“导入”是无法撤消的操作。设置此属性后,无法将此属性更改回“DirectQuery”或“双”。

需要说明的是:可在 Power BI Desktop 和 Power BI 服务中使用“双”存储模式 。


》DirectQuery 表和“双”表约束

“双”模式表与“DirectQuery”模式表的功能约束相同。这些约束包括有限 M 转换,以及计算列中的受限 DAX 函数。


》“双重”设置的传播

请考虑下列模型,其中所有表都来自支持导入和 DirectQuery 的单个源。

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

可将维度表(客户、地域和日期)设置为“双重”,以减少语义模型中的有限关系数,并提高性能。有限关系通常涉及至少一个 DirectQuery 表,其中联接逻辑无法推送到源系统。由于“双重”表可以充当“DirectQuery”或“导入”表,因此可以避免这种情况。

传播逻辑旨在帮助包含多个表的模型。假设你有一个带 50 个表的模型,只有某些事实(事务)表需要进行缓存。Power BI Desktop中的逻辑会计算出必须设置为“双” 的维度表的最小集,因此你不必再动手计算。

传播逻辑只遍历一对多关系的“一”方。


》存储模式的使用情况示例

假设应用以下存储模式属性设置:

假设“销售”表中有大量数据,设置这些存储模式属性会导致以下行为 :

  • 由于 Power BI Desktop 缓存维度表(日期、客户和区域),因此当报表检索要显示的切片器值时,初始报表的加载速度应该会很快 。

  • Power BI Desktop 不会缓存“销售”表。如果不缓存此表,Power BI Desktop 实现以下结果:数据刷新速度加快,内存占用减少;基于“销售”表的报表查询在 DirectQuery 模式下运行 。这些查询可能需要更长时间才能完成,但更接近实时,因为缓存延迟未引入。

  • 由于基于“SurveyResponse” 表的报表查询从内存中缓存返回,因此速度应相对较快。


》命中或错过缓存的查询

如果将 SQL Profiler 连接到 Power BI Desktop 的诊断端口,可执行基于以下事件的跟踪,从而确定哪些查询命中或错过了内存中缓存:

  • Queries Events\Query Begin

  • Query Processing\Vertipaq SE Query Begin

  • Query Processing\DirectQuery Begin

对于每个“Query Begin” 事件,使用相同的 ActivityID 查看其他事件。例如,如果没有“DirectQuery Begin”事件,但有“Vertipaq SE Query Begin”事件,表明已通过缓存对查询进行应答 。

引用“双”模式表的查询从缓存中返回数据(若有),否则会还原为“DirectQuery”模式。

以下查询从上一个表继续。它只引用“Date”表中的列,该表处于“双”模式。因此,查询应该能命中缓存:

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

下图的查询非常有趣,因为它结合了这两个列。此查询未命中缓存。最初可能希望它从缓存中检索 CalendarYear 值,并从源中检索 SalesAmount 值,然后合并结果。

但这种方法的效率要低于将 SUM/GROUP BY 运算提交到源系统中。如果该操作向下推送到源,返回的行数可能会少得多。

需要说明的是:合并缓存表和非缓存表时,此行为不同于 Power BI Desktop 中的多对多关系。


》缓存应保持同步

上文中显示的查询表明,“双”模式表有时会命中缓存,有时也不会。因此,如果缓存已过期,可能返回不同的值。

查询执行不会试图掩盖数据问题,例如通过筛选 DirectQuery 结果以匹配缓存值。了解数据流是企业的责任,需要相应地进行设计。如有必要,有一些现成的技术可在源中处理此类情况。

“双” 存储模式是一种性能优化。只有在不影响满足业务需求的情况下,才能使用它。


》数据视图

如果语义模型中至少有一个表的“存储模式”设置为“导入”或“双重”,系统便会显示“数据”视图选项卡。

在“数据”视图中选择“双”和“导入”模式表时,它们会显示缓存数据 。“DirectQuery”模式表不显示数据,而是显示消息,以指明无法显示 DirectQuery 表。


》注意事项和限制

- 当前 Power BI Desktop 版本的存储模式及其与复合模型的相关性有一些限制:SAP HANA 和 SAP Business Warehouse 的实时连接(多维)源无法用于复合模型。

- 使用 DirectQuery 连接到这些多维源时,既无法同时连接到另一个 DirectQuery 源,也无法将它与导入的数据结合。

- 使用复合模型时,仍要遵守现有的 DirectQuery 使用限制。现在每个表都要遵循其中许多限制,具体视表的存储模式而定。例如,导入表上的计算列可以引用其他表,但是 DirectQuery 表上的计算列仍限制为只能引用同一表上的列。如果模型中的任何一个表都是 DirectQuery,则其他限制适用于整个模型。



以上就是关于「在 Power BI Desktop 中管理存储模式」的全部内容。感谢您的耐心阅读,更多 Power BI 学习资源,请持续关注优阅达大数据生态。