我正在协助我的团队使用我们正在开发的Power BI报告解决问题。我们在源SQL数据库中有一个相当复杂的数据模型,因此我们创建了5-6个视图以更好地管理数据。我们需要使用DirectQuery,因为对报表的一项关键要求是数据库中的最新数据是可见的,而不是在加载/缓存数据时出现延迟。我们也只有一个数据源,只有一个数据库。
运行报告时,我们看到特定用户为报告数据源建立了200-500个与数据库的连接,并且这些连接没有关闭。这显然是一个问题,对任何产品来说都是不可持续的。我们有一张带有Microsoft高级支持的票证,用于解决连接未关闭的问题,但与此同时,我想知道我们在报告中是否做错了什么?
当我在查询编辑器中查看查询时,基本上每个视图都有一个查询,这很简单:
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,对于我们可以查看报告/解决问题/更改报告有什么建议吗?
谢谢!
答案 0 :(得分:1)
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
才能看到结果。
答案 1 :(得分:0)
好的。
我们在源SQL数据库中有一个相当复杂的数据模型,因此我们创建了5-6个视图以更好地管理数据。
很好。
我们要求使用DirectQuery,
但是现在您将度过一段糟糕的时光。 DirectQuery +复杂视图是导致性能下降的秘诀。对视图的查询将添加联接,可能会在整个模型中添加过滤器上下文以及“度量”和“计算列”表达式。这些查询将基于用户与报表的交互而动态变化。因此,很难看到并测试所有可能的查询。
基本指南是对视图使用导入模式,而对正确索引的表仅使用DirectQuery。为了解决数据的新鲜度问题,您可以用加载的表替换视图,并保持应用程序的最新状态,或者使用索引视图等。