【问题标题】:Getting data from an Oracle database in Power BI desktop keeps forever从 Power BI Desktop 中的 Oracle 数据库获取数据永久保存
【发布时间】:2021-09-17 10:38:12
【问题描述】:

我正在尝试从 Power BI Desktop 中的单个 Oracle 数据库表中获取数据。该表有大约 200 万行数据。

以下查询工作正常:

let
    Source = Oracle.Database("PPM_PROD", [HierarchicalNavigation=true]),
    PPM_DEV = Source{[Schema="PPM_DEV"]}[Data],
    Timesheets = PPM_DEV{[Name="BI_TIMESHEET"]}[Data]
in
    Timesheets

但是,如果我添加如下 SQL 语句,我会遇到问题:

let
    Source = Oracle.Database("PPM_PROD", [HierarchicalNavigation=true, Query="SELECT * FROM PPM_DEV.BI_TIMESHEET#(lf)WHERE (ACTUAL_TIME > 0) OR (OVERTIME > 0) "]),
    PPM_DEV = Source{[Schema="PPM_DEV"]}[Data],
    Timesheets = PPM_DEV{[Name="BI_TIMESHEET"]}[Data]
in
    Timesheets 

此查询不会获取任何数据,并且数据加载/刷新将永远停留在“评估”阶段。任何建议将不胜感激。

【问题讨论】:

  • 第一个查询没有得到结果,只是对整个数据集进行了偏移。第二个是执行过滤器以获取与 where 条件匹配的特定行数。您是否有权访问 Oracle 向我们展示该查询的执行计划?
  • 只是个人观察,在使用 Power BI 创建仪表板和报告 2 年后,我开始意识到它不能很好地处理大量数据。在我的项目中,我们必须在 Oracle 表中对结果进行半聚合,然后才能在 Power BI 的报告中使用这些数据。但是,它不会挂起,只是需要时间。
  • 很遗憾,我目前无法访问 Oracle。对于 Power Query 编辑器中的第一个查询,当我单击关闭并应用时,“评估...”阶段持续大约一秒钟,数据开始加载 - 缓慢但稳定。然而,对于第二个,我无法通过“评估……”阶段。这种行为似乎与上面的特定 SQL 无关,如果我包含任何 SQL(即使是像 SELECT * FROM PPM_DEV.BI_TIMESHEET 这样简单的东西),我也无法通过“评估...”阶段。跨度>

标签: oracle powerbi powerquery powerbi-desktop m


【解决方案1】:

在这种情况下,我建议不要使用 SQL 语句,而是在 Power Query 编辑器中对其进行过滤。在最常见的筛选方案中,Power Query 会将应用的筛选步骤转换为类似于 SQL 语句的本机查询。

如果您愿意,您仍然可以使用 SQL 语句,但步骤除外

    PPM_DEV = Source{[Schema="PPM_DEV"]}[Data],
    Timesheets = PPM_DEV{[Name="BI_TIMESHEET"]}[Data]

如果您已经选择并过滤了Timesheets 表,则没有任何意义。这些步骤用于导航到您要查询的架构和表,但您已经在 SQL 中处理了这些。

【讨论】:

  • 你是对的;我首先导航到表格,然后添加了 SELECT 语句,因此自动生成的 M 代码保留了这两行。我也试过没有这两行,但结果是一样的。包含 Query 选项时似乎有些问题。另一方面,Power Query 编辑器中的筛选就像一个魅力。但是,有一个问题:第一步应该立即应用过滤器。例如,如果我首先更改了某些列类型,然后应用了过滤器,则查询会在应用过滤器之前尝试检索所有行。
  • 能否重新排列查询编辑器中应用的步骤以先进行过滤?某些转换可能会破坏查询折叠,因此您可能需要按特定顺序排列这些步骤以获得最佳结果。
  • 是的,这正是我所做的,问题解决了!感谢您的提示...
猜你喜欢
  • 2019-09-15
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2019-11-08
  • 2021-09-22
  • 1970-01-01
相关资源
最近更新 更多