Power BI与DB的最大化连接:(我们可以用单个Sql.Database调用填充多个表吗?

时间:2019-04-14 22:52:50

标签: azure-sql-database powerbi powerquery

我正在协助我的团队使用我们正在开发的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,对于我们可以查看报告/解决问题/更改报告有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

Power BI建立与数据库的多个连接,以并行加载多个表。如果您不想这样做,则可以从Options-> Current file-> Data Load-> Enable parallel loading of tables中将其关闭:

enter image description here

请记住,关闭此选项很可能会增加模型加载时间。

您可能想看看Maximum connections per data source-> Options-> Current file中的Direct query选项,以及整个Query reduction的内容。对于像您这样的情况,强烈建议在此页面上打开Slicer selectionFilter selection,但是您需要培训用户他们需要单击apply才能看到结果。

答案 1 :(得分:0)

好的。

  

我们在源SQL数据库中有一个相当复杂的数据模型,因此我们创建了5-6个视图以更好地管理数据。

很好。

  

我们要求使用DirectQuery,

但是现在您将度过一段糟糕的时光。 DirectQuery +复杂视图是导致性能下降的秘诀。对视图的查询将添加联接,可能会在整个模型中添加过滤器上下文以及“度量”和“计算列”表达式。这些查询将基于用户与报表的交互而动态变化。因此,很难看到并测试所有可能的查询。

基本指南是对视图使用导入模式,而对正确索引的表仅使用DirectQuery。为了解决数据的新鲜度问题,您可以用加载的表替换视图,并保持应用程序的最新状态,或者使用索引视图等。