【问题标题】:How "CREATE VIEW" works?“创建视图”如何工作?
【发布时间】:2021-08-25 10:31:00
【问题描述】:

我是这里的新手。我有一个问题需要你的帮助。

这是我的上下文:我有 1 个包含 1 亿数据行的表。我需要从这个表中构建报告。我使用 Power BI,使用直接导入,并在 Power BI 中编写 SQL 语句。当数据加载到 Power BI 时,它减少到 2000 万行(因为我在 SQL 语句中使用了 GROUP BY)。但是Power BI的性能真的很糟糕。在我看来,Power BI 必须运行查询语句,然后将数据可视化,所以它的性能很差。

这是我的解决方案:我将在我的数据库中创建视图(使用 GROUP BY 语句)。这样,运行查询工作负载不再属于 Power BI。我的数据库将负责执行 SQL 语句。而 Power BI 只需要可视化数据,Power BI 的性能会更好。

这是我的问题:

1 - 我的解决方案有效吗? :)))

2 - 如果我的解决方案有效,我的数据库只需要 1 次运行 CREATE VIEW 语句,以后不再需要运行它,对吧?

3- 如果我的解决方案有效,SQL 运行工作负载将从 Power BI 转移到我的数据库,对吗?

提前谢谢你。

【问题讨论】:

  • 1. No 2. No 3. 不,因为您正在使用查询,所以已经是这样了。简而言之,在 power bi 中运行查询或使用该查询创建视图并从 Power BI 调用该视图之间没有区别
  • 如果您的数据库支持物化视图,这将有助于提高性能,但要意识到数据将是快照,而不是实时数据。如果您走这条路线,您将需要定期刷新物化视图。检查您的数据库文档。
  • 物化视图无助于导入模型中的性能。它将加快导入过程,但无论如何您都需要花时间来刷新视图。所以真的在这里根本没有帮助。

标签: sql powerbi create-view


【解决方案1】:

我不知道 powerBI,但是如果您使用 view,它会在每次调用时在 view 中执行查询。您可以尝试物化视图而不是视图。但请注意,物化视图在创建或刷新时具有数据快照。

例如,视图 MY_MATERIALIZED_VIEW 每天都在刷新。

create materialized view MY_MATERIALIZED_VIEW
build immediate
refresh force
on demand
start with sysdate next sysdate + 1
as
....query

【讨论】:

  • 请注意,物化视图是特定于产品的。并非所有产品(例如 SQL Server)都支持它们(以该名称/具有特定功能)
  • 物化视图无助于导入模型中的性能。它将加快导入过程,但无论如何您都需要花时间来刷新视图。所以真的在这里根本没有帮助
  • 确实有帮助。您不必在每次执行时都刷新视图。甚至一些客户也需要过去一段时间的数据报告,例如最后一天的销售额。我说“如果你使用视图,它会在每次调用时在视图中执行查询。”并且还提到“物化视图具有数据的快照”
  • 如果您阅读该问题,则问题与 Power BI 导入模型中的性能有关。物化视图对此无济于事。总的来说,它甚至对导入时间没有帮助,因为无论如何你都必须先实现它
  • 在 Power BI 中针对导入模型运行报表时,报表是针对导入的数据而不是数据库运行的。
【解决方案2】:

当您使用导入模式时,您的数据库是查询一次(在刷新时),但视图仍然需要进行聚合,从视图中选择与使用分组方式选择没有区别(视图只是一个很好的打包查询,更好地实现视图或使用日常工作填充标准表);

最好删除早于 X 的未使用的列和行(如果可能,也进行聚合)。

考虑使用增量刷新来缩短负载。

https://docs.microsoft.com/en-us/power-bi/connect-data/incremental-refresh-overview

Power BI Premium、Premium per user、Power BI Pro 和 Power BI Embedded 数据集支持增量刷新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2021-12-21
    • 2016-02-21
    • 2020-01-14
    • 2012-10-10
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多