You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI Desktop连接Oracle加自定义SQL后取数永久卡在评估阶段

问题根因

当你在Oracle.Database函数中传入Query参数时,函数将直接返回你自定义SQL的执行结果,而非完整的数据库层级导航结构。你原代码中后续筛选Schema、提取指定表的步骤,相当于在SQL返回的结果集中寻找不存在的数据库层级节点,所以会永久卡在评估阶段。

可行解决方法

方案1:简化M查询,删除多余导航步骤

直接保留SQL查询步骤即可,无需后续的表导航操作,正确代码如下:

let
    Source = Oracle.Database("PPM_PROD", [HierarchicalNavigation=true, Query="SELECT * FROM PPM_DEV.BI_TIMESHEET WHERE (ACTUAL_TIME > 0) OR (OVERTIME > 0) "])
in
    Source

提示:测试阶段可以在SQL末尾加上AND ROWNUM < 10,先验证查询逻辑是否能正常返回少量数据,确认无误后再移除限制加载全量数据。

方案2:使用查询折叠功能,无需手写SQL

如果你不想硬编码SQL语句,可以保留你最初能正常运行的查询,之后直接在Power Query界面添加筛选条件:筛选ACTUAL_TIME > 0 或 OVERTIME > 0,只要Power BI的查询折叠功能正常开启,筛选逻辑会自动转换为等效的Oracle SQL语句发送到数据库执行,执行效率和手写SQL完全一致,且后续调整筛选条件更灵活。

性能优化建议
  • 请DBA在Oracle数据库侧为ACTUAL_TIME和OVERTIME字段创建联合索引,200万行的表如果没有索引,全表扫描会大幅拉长查询时间
  • 升级Power BI Desktop的Oracle连接驱动到官方最新版本,旧版本驱动存在已知的查询兼容性问题,可能导致加载卡顿

内容的提问来源于stack exchange,提问作者Burçin Kermen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:06:03