前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Power BI: DAX查询的引擎内部架构

Power BI: DAX查询的引擎内部架构

作者头像
Exploring
发布2023-10-22 17:16:17
2740
发布2023-10-22 17:16:17
举报

文章背景: 最近在学习DAX权威指南第17章,介绍了运行DAX查询的引擎内部架构。DAX查询可以完全在存储于内存的模型上运行,也可以完全由原始数据源运行,还可以混合使用这两种方式。

在报表端可以使用DAX或MDX语言向表格模型发送查询。尽管使用的查询语言不同,但表格模型都会使用以下两个引擎来处理查询:

  • 公式引擎(FE):负责处理请求,生成和执行查询计划。
  • 存储引擎(SE): 从表格模型中检索数据,以响应公式引擎发出的请求。存储引擎有两种形式: 图1展示了执行DAX查询或MDX查询的架构体系。
    • VertiPaq 将数据副本托管到内存中,该副本定期在数据源中被刷新。
    • DirectQuery 将每个请求的查询直接转发到原始数据源中。DirectQuery 不额外创建数据副本。

图1 发送到表格模型的查询使用公式引擎和存储引擎进行处理

1 公式引擎介绍

公式引擎是运行DAX的核心引擎。公式引擎将DAX或MDX查询转换为查询计划(Query Plan),其内容是将要执行的物理步骤的列表。查询计划中的每个步骤都对应于公式引擎执行的特定操作。

公式引擎可以处理DAX或MDX函数请求的所有操作,并解析复杂的DAX和MDX表达式。但是,当公式引擎必须从底层表中检索数据时,它会将部分请求转发到存储引擎中。

公式引擎向存储引擎发送请求,存储引擎通过返回数据缓存(datacache)来响应。数据缓存是由存储引擎创建并由公式引擎读取的临时存储区域。

注意:数据缓存不会被压缩;无论来自哪个存储引擎,数据缓存都是以未压缩格式存储的普通内存表。

公式引擎不具备在不同查询之间复用结果的缓存系统,DAX完全依赖于存储引擎的缓存功能。

最后要注意的是,公式引擎是单线程的。公式引擎按顺序向存储引擎发送请求,每次执行一个查询。只有在存储引擎中执行的请求才有可能并行执行,存储引擎具有不同的结构,可以利用多个内核。

2 存储引擎介绍

存储引擎的任务是扫描表格模型数据库并生成公式引擎所需的数据缓存。存储引擎不依赖DAX。例如,当使用DirectQuery方式连接SQL Server时,将使用SQL作为存储引擎的查询语言。VertiPaq也是不依赖于DAX的,它的整体架构非常清晰和完善。

开发者可以使用以下3个选项之一来定义每个表使用的存储引擎。

  • 导入(Import):也被称为内存模式(in-memory),或VertiPaq。数据由VertiPaq引擎存储,引擎在刷新数据期间从数据源复制和重组数据。
  • 直连(DirectQuery):在查询时从数据源读取表的内容,数据在刷新期间不被存储在内存中。
  • 双(Dual):数据可以使用VertiPaqDirectQuery查询。在刷新数据期间,表被加载到内存中,但是在查询时,表也可以通过DirectQuery模式读取包含最新信息的数据。

(1)导入模式是创建新 Power BI 报表的默认方式。数据刷新可按计划进行,也可按需进行。

(2)对于某些数据源,可以使用 DirectQuery直接连接到数据源,而无需导入数据。

(3)在存储模式下,表既可充当缓存表,也可以充当未缓存表,具体视提交到 Power BI 数据集的查询的上下文而定。在一些情况下,查询是通过缓存数据完成。在另一些情况下,查询是通过对数据源执行按需查询完成。

(4)将表的存储模式更改为导入是无法撤消的操作 。设置后,无法将此属性更改回DirectQuery存储模式。

选择合适的存储模式可以提高查询性能,并且减少数据延迟。

  • 对于要求实时准确或者安全度较高的数据源,可以通过直接查询来满足要求,不进行缓存可以减少数据延迟;
  • 对于不常更新的数据源,可以考虑直接导入缓存数据,减少数据刷新次数,提高查询的性能和交互性。

参考资料:

[1] Power BI性能提升的5大秘密武器(https://www.cnblogs.com/yeacer/p/12628173.html)

[2] Power BI - Tabular - 模型类型(https://www.jianshu.com/p/49a0e391d98c)

[3] DAX权威指南(https://www.powerbigeek.com/definitive-guide-to-dax-cn/)

[4] Power BI 存储模式介绍(导入、DirectQuery、双)(https://blog.csdn.net/WHYbeHERE/article/details/129027108)

[5] 在 Power BI Desktop 中使用 DirectQuery(https://learn.microsoft.com/zh-cn/power-bi/connect-data/desktop-use-directquery)

[6] 再看Power BI数据连接的三种方式(https://cloud.tencent.com/developer/article/1870565?from=15425)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 公式引擎介绍
  • 2 存储引擎介绍
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档