接下来是一个专题,记录和分享Power BI 和SSAS配合的实操经验。
第一篇是关于Power BI连接数据方式的对比。这是个老生常谈的话题。微软官方考试Exam70-778教材的第一章,就是重点介绍这个方面。这种基础性的知识点繁琐而且枯燥,就像一本字典,只有用到的时候才会去查阅。
Power BI提供了三种类型的方式:导入(Import)、直接查询(Direct Query)和实时连接(Live Connection)。相信大部分power bi使用者都会选择通过导入的方式来连接数据,因为这种方式给予用户最高的灵活性和自由度,能充分发挥power bi在数据清洗、建模等方面的作用。但导入数据会随着数据量的增大而使得文件变大、速度变慢。这使我不得不重新审视和比较这三种方式的优劣。以下文字是翻译自https://radacad.com/的一篇对比文章。文章写于2017年,部分内容显然与现在的情况不太相符,但总体方向还是保持一致的。点击左下方阅读原文可以查看英文原文。
01
什么是导入数据(Import)或计划刷新?
这个方法有两个名字,有人称之为导入数据,有人称之为计划刷新。这两个名称都解释了此方法的行为。使用此方法,来自源的数据将加载到 Power BI。在 Power BI 中加载意味着消耗内存和磁盘空间。只要您使用 Power BI Desktop 在您的机器上开发 Power BI,那么它就消耗您机器的内存和磁盘空间。当您将报表发布到网站上时,它将消耗 Power BI 云机的内存和磁盘空间。
如果源表中有 100 万行,并且在不进行筛选的情况下将其加载到 Power BI 中,则最终在 Power BI 中拥有相同数量的数据行。但是,如果您有一个包含 1000 个表的数据库,则在 Power BI 中仅加载其中 10 个表,那么您只会获得这 10 个表的内存消耗。最重要的是,您花费的内存和磁盘空间与将数据加载到 Power BI 中一样多。
xVelocity 的压缩引擎
阅读上述有关导入数据的解释后,您可能会得到的第一个假设是;如果您有一个 100GB 的数据库,那么如果将其导入 Power BI,您将在 Power BI 中获得 100GB 的文件大小。这不是真的。Power BI 利用 xVelocity 的压缩引擎并使用列存储内存技术。列存储内存技术压缩数据并以压缩格式存储。有时,您可能有一个 1GB 的 Excel 文件,当您将其导入 Power BI 时,您的 Power BI 文件最终只有 10MB。这主要是因为 Power BI 的压缩引擎。然而,压缩率并不总是那样。这取决于很多事情;列中唯一值的数量,有时是数据类型和许多其他情况。
简而言之:Power BI 将存储压缩数据,Power BI 中的数据大小将远小于其在数据源中的大小。
这种方法的重要优点和缺点
Power BI 全功能
使用此方法,您可以获得 Power BI 的全部功能。您可以使用 Power Query 组合来自多个源的数据,或使用 DAX 编写高级时间智能表达式或可视化。使用此方法对 Power BI 的功能没有限制。您可以使用所有组件。
尺寸限制
使用此方法,您对模型的大小有限制。你的 Power BI 模型(或者说文件)不能超过 1GB。您的帐户中通常最多有 10GB 大小,但是,每个文件的大小最多应为 1GB。对此有一个例外;Power BI Premium 允许您在 Power BI 网站中加载最多 50GB 大小的模型。如果没有 Premium,您可以拥有的最大文件大小为 1GB。但是,请记住,Power BI 文件中的 1GB 不等于源中的 1GB 数据(如压缩引擎部分所述)。(这是2017年的数据,目前的容量有所提升)。
这是最快的方法
这种连接方法是最快的选择。数据加载到服务器的内存中,报表查询将根据加载到内存中的数据进行评估。此方法没有滞后或缓慢(只要您设计的 Power BI 模型没有性能问题)。
02
什么是直接查询(Direct Query)?
DirectQuery 是到数据源的直接连接。数据不会存储在 Power BI 模型中。Power BI 将是一个可视化层,然后每次从数据源查询数据。Power BI 将只存储表的元数据(表名、列名、关系……)而不是数据。Power BI 文件大小会小得多,而且很可能你永远不会达到大小限制,因为模型中没有存储数据。
DirectQuery 只能通过少数数据源实现。在撰写本文时(2017年),以下是 DirectQuery 支持的数据源:
· 亚马逊红移
· Azure HDInsight Spark(测试版)
· Azure SQL 数据库
· Azure SQL 数据仓库
· IBM Netezza(测试版)
· 黑斑羚(2.x 版)
· Oracle 数据库(版本 12 及更高版本)
· SAP 业务仓库(测试版)
· SAP HANA
· 雪花
· Spark (Beta)(0.9 及以上版本)
· 数据库服务器
· Teradata 数据库
这种方法的重要优点和缺点
可扩展性:主要优势
这种方法不会有大小的限制。主要是因为 Power BI 文件中没有存储数据,因此您永远不会遇到任何数据大小问题。您可以在 SQL Server、Oracle 或任何其他受支持的数据源中拥有包含 Peta Bytes 数据的数据源,并从 Power BI 连接到它。
功能有限:Power Query 操作很少,主要是可视化
此方法不会具有 Power BI 的全部功能。使用此方法,Power BI Desktop 中将只有两个选项卡;报告和关系。您可以在此模式下更改关系。
在 Power Query 中,可能不少操作是无法执行的。比如无法在此模式下执行合并数据源。你会收到这样的消息:
代码语言:javascript复制您的 DAX 表达式也受到限制;你不能写出所有类型的表达式。
很多功能不支持;例如:不支持时间智能功能。
但是,使用此模式,您可以获得完整的可视化支持。
连接缓慢
这种方法的一大缺点是连接速度比其他类型的连接慢。请注意,每个视觉对象都会向数据源发送一个查询,然后数据会返回。您的报告中通常有多个视觉对象,并且每次向数据源发送查询时都会进行切片和切块。在此模型的数据源中,性能考虑是必须的。
仅举一个很小的性能调优示例;这是当我的表上有 4800 万条记录的正常索引时我得到的性能,从我的具有 4800 万条记录的表中进行常规选择总和需要 4 分 4 秒才能运行。
当我拥有聚集列存储索引时,相同的查询会在不到1秒的时间内响应;当我在具有相同数据行数的同一个表上拥有聚集列存储索引时,性能显着提高。
03
什么是实时连接(Live Connection)?
实时连接在处理数据源的方式上与 DirectQuery 非常相似。它不会在 Power BI 中存储数据,并且每次都会查询数据源。但是,它与 DirectQuery 不同。Live Connection 仅支持这些数据集;
· SQL Server 分析服务 (SSAS) 表格
· SQL Server 分析服务 (SSAS) 多维
· Power BI 服务
因为这些数据源本身就是建模引擎,所以 Power BI 只连接到这些并获取所有模型元数据(度量名称、属性名称、关系...)。使用此方法,您需要处理数据源中的所有建模需求,而 Power BI 只需通过可视化呈现该数据。
这种方法的重要优点和缺点
带有 OLAP 或表格引擎的大尺寸模型
该模型的一大好处是您可以拥有一个大数据模型(不限于 1GB),并且您还可以利用 SSAS 的建模层。SSAS 表格会给你 DAX,多维会给你 MDX。使用这两种语言中的任何一种,您都可以满足所有计算和建模需求。此方法比 DirectQuery 具有更好的建模功能。因为在 DirectQuery 中,没有 DAX 或 MDX 作为帮助的分析语言。所有计算都需要在数据库端完成。有时在数据库端进行计算比在分析表达式语言中进行计算要复杂得多。
不能使用Power Query,只能可视化
这种方法的最大缺点是您甚至不会有 Power Query 简单转换。用这种方法;您将只有报告选项卡。
报告级别度量
仅使用 SSAS 表格实时连接,您可以获得报表级别的度量。这使您能够编写 DAX 度量。但是,您可能希望将它们保留在数据源中以保持模型一致。在撰写本文时,此功能尚未与 SSAS Multi-Dimensional 相关联。
报表级别度量是一项很棒的功能,因为用户无需调用 BI 开发人员即可创建度量。但是,这些度量不会添加到数据集中。这些只是为了报告。因此,为了您的模型的一致性,您可能希望将度量创建保留为 SSAS 数据源模型的一部分。
04
实时连接和 DirectQuery 有什么区别?
现在您已经了解了所有不同类型的连接,然后再详细讨论它们的优缺点。让我们更多地关注 Live Connection 和 DirectQuery 之间的区别;
例如,DirectQuery 是与上面列出的数据源的直接连接;SQL Server、甲骨文、IBM……LiveQuery 直接连接到分析服务模型(SSAS 表格、多维或在服务中发布的 Power BI 报告)。
关系配置
使用 DirectQuery,您仍然可以在某些情况下配置关系。使用实时连接,您没有关系选项卡。这应该在数据源中处理。
报告级别度量
通过某些类型的 SSAS 实时连接(到表格模型或 Power BI 服务),您可以获得报表级别的度量。
实时连接中没有 Power Query
在 DirectQuery 中,您仍然可以执行简单的 Power Query 转换。但是在实时连接中 Power Query 根本不可用。您所能做的就是将源数据模型更改为另一个模型或另一个服务器。
05
总结:每种方法的优缺点
哪种方法性能最好最快?
导入数据是最快的选择。数据被加载到服务器的内存中,所有查询将立即得到解决。实时连接是此列表中的下一个选项,尤其是在使用 SSAS 表格或 Power BI 服务的情况下,因为这两种技术是内存技术并且比多维执行速度更快。DirectQuery 是最慢的连接类型。您必须考虑对数据源进行性能调整。
哪种方法更灵活?
通过导入数据,您可以获得 Power BI 的全部功能。完整的 Power Query 转换、DAX 度量以及可视化。Direct Query 和 Live Connection 不如直接导入,因为它们都缺失了一些功能。DirectQuery 将为您提供很少的 Power Query 选项。Live Connection 将为您提供报告级别的度量。
哪种方法更具可扩展性?
导入数据方法的大小限制为每个模型 1GB。因此,如果不使用 Power BI Premium,这种方法的可伸缩性就不大了。使用 DirectQuery 和实时连接,您可以获得更好的可扩展性。数据源支持海量数据。所以这方面的赢家是 Live Connection 和 DirectQuery
使用每种方法的架构场景是什么?
导入数据以获得敏捷性和性能
导入数据具有功能齐全的 Power BI,性能卓越。所以如果你的数据集不是一个庞大的数据集,那么你可以很容易地使用这种方法,并在非常快的开发时间框架内生成报告。