我正在协助我的团队解决我们正在开发的Power BI报告的问题。我们在源SQL数据库中有一个相当复杂的数据模型,因此我们创建了5-6个视图以更好地管理数据。我们需要使用DirectQuery,因为报告的一个关键要求是数据库中最新的数据是可见的,而不是延迟加载/缓存数据。我们还有单个数据源,只有一个数据库。
当我们运行报告时,我们会看到报告数据源的特定用户与数据库的连接数量达到200-500,并且这些连接不会关闭。这显然是一个问题,对任何产品都是不可持续的。我们打开了微软高级支持的门票,以解决未关闭的连接,但与此同时,我想知道我们是否在报告中做错了什么?
当我在查询编辑器中查看查询时,我们基本上每个视图都有一个查询,这很简单:
let
Source = Sql.Database(Server, Database)
query_view_name = Source{[Schema ......]}[Data]
in
query_view_name
(我没有在我面前的原始代码,但这是它的要点。)
在我看来,基于数据库中的分析,“Sql.Database”每次调用此视图时都会打开一个新连接。并且有5-6个视图,这至少是5-6个连接;然后每次更改过滤器时,它就会有更多的连接,并且它是从那里开始的化合物,直到数据库连接池被最大化。
有没有办法使用单个数据库连接填充所有表?为什么Power BI会使用如此多的连接?我们可以在高级查询编辑器中填充多个表吗?使用DirectQuery,是否有任何关于我们可以在报告中查看/排除故障/更改的建议?
谢谢!
Power BI建立与数据库的多个连接,以并行加载多个表。如果您不想这样,可以从Options
-> Current file
-> Data Load
-> Enable parallel loading of tables
关闭它:
请记住,最有可能关闭此选项会增加模型加载时间。
您可能需要查看Maximum connections per data source
-> Options
-> Current file
中的Direct query
选项以及整个部分Query reduction
。对于像您这样的案例,强烈建议在此页面上启用Slicer selection
和Filter selection
,但您需要培训您的用户,他们需要点击apply
才能查看结果。
好。
我们在源SQL数据库中有一个相当复杂的数据模型,因此我们创建了5-6个视图以更好地管理数据。
没关系。
我们需要使用DirectQuery,
但现在你将度过一段美好时光。 DirectQuery +复杂视图是性能不佳的一个因素。针对您的视图的查询将添加连接,可能在整个模型中添加过滤器上下文,以及测量和计算列表达式。并且这些查询将根据用户与报表的交互动态更改。因此很难看到并测试所有可能的查询。
基本指导是对视图使用导入模式,仅对正确索引的表使用DirectQuery。要解决数据新鲜度问题,您可以使用已加载的表替换视图并使其与应用程序保持同步,或者使用索引视图等。