在Power BI桌面版本中使用DirectQuery

原文地址:https://docs.microsoft.com/en-us/power-bi/desktop-use-directquery 

 

在Power BI桌面版本中,可以通过import的方式将外部数据源的数据进行复制,之后引入到Power BI当中进行分析。对于一些特定的数据源,还可以使用另外一种方式获取数据,即通过DirectQuery方式直接连接外部数据源获取数据。

 

DirectQuery支持的数据源

 

要获取支持用DirectQuery方式连接的数据源清单,请参考文章 Data sources supported by DirectQuery

 

如何使用DirectQuery方式建立连接

 

当数据源支持使用DirectQuery获取数据时,在连接窗口处会提供相应的连接选项供选择。

 

Import和DirectQuery主要有以下区别:

 

Import --被选中的表单和列会被以复制的形式导入到Power BI桌面程序里。当你创建或者使用可视化时,Power BI使用的是导入本地的数据。如果源数据发生变化,你必须通过刷新方式将所有的数据重新导入一次才能在Power BI中看的更新。

 

DirectQuery --源数据不会被导入或者复制到Power BI桌面程序里。相关数据源的表单和列会出现在Power BI的字段(Field)清单中。对于多维的数据源,例如SAP Business Warehouse,在数据集中被选中的维度和度量会出现在字段(Field)清单中。当你创建或者使用可视化时,Power BI 会直接从数据源中查找数据,这就意味着你每次浏览的都会是最新数据。

 

虽然有一定限制,但是DirectQuery支持很多种数据建模和数据转换方式。在使用DirectQuery方式获取数据时,创建或者使用可视化需要查询底层源数据,所消耗的时间主要取决于外部数据源的性能。如果在最近一段时间已经完成过对数据源的查询请求,此时Power BI就会使用最近的一次查询结果的数据来生成可视化以减少时间消耗。

 

点击开始(Home)面板下的刷新(Refresh)按键,可以保证获取到当前最新的数据。如果想查看关于DirectQuery更详细的介绍文章,可以查看Power BI and DirectQuery 。或者查看本文下面章节中关于介绍使用DirectQuery的优势,限制以及重点考虑因素的详细情况。

 

使用DirectQuery的优势

 

使用DirectQuery主要有以下优势:

  • DirectQuery允许你对非常大的数据集创建可视化,这样你就可以避免需要先将大数据集导入再进行预聚合。
  • 当数据源发生变化时需要进行刷新操作才可以获得最新结果,对于一些报表,为了显示最新的数据,需要重新传送大量的源始数据才能进行更新,这使得采用导入方式创建数据不合时宜。相反,由于DirectQuery方式是实时获取最新数据,因此更适宜处理这种情况。
  • DirectQuery没有只能加载1GB数据集的限制。

 

使用DirectQuery的局限性

 

目前,使用DirectQuery连接数据有以下局限性:

  • 所有表单必须来自于同一个数据库
  • 当查询编辑器中的语句过于复杂时,会有错误返回。为了消除这些错误,你必须在查询编辑器中删除有问题的语句或者采用import的方式进行导入。此外,查询编辑器不支持多维的数据源,例如SAP Business Warehouse。
  • 交叉筛选器方向只能是单一类型,而不能使用双向类型(尽管在DirectQuery中可以间接通过交叉过滤的方式实现双向连接,但是次功能仅限于预览版本)。对于多维的数据源,例如SAP Business Warehouse,DirectQuery不支持使用关联关系。
  • DirectQuery模式下没有时间智能模块。例如,DirectQuery模式不支持使用特殊处理的时间列(年,季度,月,日,等等)。
  • 默认情况下,DAX表达式的使用受到一定限制,详细情况参见后文部分。
  • 使用DirectQuery模式最多只能返回一百万的数据。虽然最多只能返回一百万行,但是并不影响通过聚或计算来创建数据集。例如,你可以通过查询操作在数据源聚合一千万行数据,只要返回给Power BI的聚合结果少于一百万行,就可以使用DirectQuery模式进行连接。如果聚合结果多于一百万行,在DirectQuery模式下Power BI会有错误返回。

 

为了确保发送给数据源的查询语句达到可接受的性能标准,默认情况下,Power BI对在度量值的使用上加了限定。高级用户可以选择解除该限制,修改方式是在文件->选项和设置->选项->DirectQuery设置,勾选“允许DirectQuery模式下的度量值不受限制“。选中这个选项后,就可以使用任意一个合法的DAX表达式去获取度量值。当然,用户必须了解,有一些在import模式下运行性能非常良好的表达式在DirectQuery模式下使用就可能花费很长时间才能返回查询结果。

 

使用DirectQuery的注意事项:

 

在选择使用DirectQuery方式前,有以下三点需要进行考量:

 

  • 性能和加载 --由于DirectQuery会将所有的请求发送给源端数据库进行处理,因此刷新视图所耗费的时间取决于后台数据库返回查询结果的时间。一般建议使用DirectQuery进行刷新的响应时间应该小于30秒。如果时间过长,会影响用户的报表使用使其无法接受。此外,一旦报表被发布到Power BI service上,如果一分钟之内无法返回查询结果,就会有超时错误抛出。

 

此外,还需基于Power BI报表的使用人数,考虑源端数据库所能承受的负载。使用角色级别安全管控(RLS)也会对源端数据库产生很大影响。对于没有使用RLS的报表上,多个用户的操作只会对数据库提交一次查询请求;但是对于使用了RLS的报表,每一个用户的刷新操作就会对后台数据库提交一次查询请求,这就会极大地增加源端数据库的负载,可能影响数据库的性能。

 

Power BI会尽可能高效的创建查询。然而,在某些特定情况下,仍然无法生成足够高效的查询以避免刷新失败。举例来说,当递交的查询会从后台数据库返回非常多的行时(超过1百万),会有以下错误返回

The resultset of a query toexternal data source has exceeded
the maximum allowed size of '1000000' rows.

对外部数据库查询结果查过了允许返回的最大值“1000000”行。

 

这种情况还会发生在当一个简单的图表包含有一个非常高基数列而汇总选项设置为“未汇总”时。一个可视化图表中包含的列基数必须小于1百万数据,如果多余1百万则必须应用了适当的过滤器。

 

  • 安全 --当一个报表发布到Power BI Service后,所有使用这个报表的用户都应用相同的证书连接后台数据库,这与使用Import方式连接数据的情况相同,即无论后台定义了什么样的安全规则,所有用户看到的都是相同的数据。如果像在支持DirectQuery连接方式的数据源制定单独的用户安全策略,可以使用RLS方法。关于RLS介绍,参加这篇文章
  • 支持的功能 --并不是所有的Power BI桌面版功能在DirectQuery模式下都可以使用,有一些可以使用但是有一定的限制。此外,一些Power BI Service中的功能(例如 Quick Insights),当数据集应用DirectQuery方式连接时也无法使用。因此,在考虑使用DirectQuery模式前,需要先衡量一下这些无法使用的功能是否会影响当前工作。

 

发布到Power BI Service

 

使用DirectQuery模式创建的报表可以发布到Power BI Service当中。如果使用的源端数据不需要本地数据网管(Azure SQLDatabaseAzure SQL DataWarehouse,或者 Redshift),在发布报表到Power BI Service之前必须提供证书。

要递交证书,可以通过选择Power BI Service中的设置->数据集,选择你要编辑的数据集,之后点击编辑证书。只有在证书提供完毕后,使用DirectQuery方式创建的报表连接数据源的错误才会消失。

对于使用DirectQuery连接的非Azure SQLDatabaseAzure SQL DataWarehouse 以及Redshift数据源,必须安装本地的数据网管,并且这个数据源必须注册建立一个数据连接。更多信息,参见Getting started with Power BI gateways

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值