我正在帮助我的团队解决我们正在开发的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时,对于报告中可以查看/排除故障/更改的内容,有什么建议吗?
谢谢!
发布于 2019-04-15 14:05:56
Power BI建立到数据库的多个连接,以并行加载多个表。如果你不想这样做,你可以在Options
->Current file
->Data Load
->Enable parallel loading of tables
中将其关闭
请记住,关闭此选项很可能会增加模型加载时间。
您可能想看看Options
->Current file
->Direct query
中的Maximum connections per data source
选项,以及整个Query reduction
部分的好处。对于像您这样的情况,强烈建议在此页面上启用Slicer selection
和Filter selection
,但您需要训练用户,让他们知道他们需要单击apply
才能看到结果。
发布于 2019-04-16 00:47:59
好的。
我们在源
数据库中有一个相当复杂的数据模型,所以我们创建了5-6个视图来更好地管理数据。
这很好。
我们有使用DirectQuery的要求,
但现在你的日子不好过了。DirectQuery +复杂视图是性能不佳的秘诀。对视图的查询将添加连接,可能会跨整个模型进行筛选上下文,以及度量和计算列表达式。这些查询将根据用户与报告的交互动态更改。因此,很难看到和测试所有可能的查询。
基本指导原则是对视图使用导入模式,并且只对索引正确的表使用DirectQuery。为了解决数据新鲜性问题,您可以将视图替换为您从应用程序加载并保持最新的表,或者可能使用索引视图等。
https://stackoverflow.com/questions/55680741
复制相似问题