为什么 OLEDB / ODBC 遗留技术仍在 PowerQuery 中使用?

Why are OLEDB / ODBC legacy technologies still used in PowerQuery?

我最近在 Excel 2016 年遇到一个问题,使用 Windows 10 的本机 32 位 ODBC 连接 (DSN),从 SQL 视图和表中提取数据,在 SQL 服务器 2008.

出于某种原因,在过去几周(2019 年 10 月),通过 ODBC 从 Excel 直接调用 SQL 服务器的某些 SQL 命令导致 Excel 到 "crash",但更像是冻结。我不得不通过任务管理器杀死 Excel。

在 SQL 服务器中 运行 的浏览量不到 2 秒,但 Excel 需要 永远 加载 - 有时超过 5 到 20分钟!

令人沮丧的是,这些 Excel 模板在 2019 年 10 月之前运行良好,而且速度相对较快(不到 30 秒)。最近,有些事情发生了变化,因为现在一些查询导致 Excel 冻结,"Connecting to datasource",并且没有进一步的 activity。

我已将查询转换为 PowerQuery,使用直接数据到 SQL 服务器连接。但是,我注意到这个 M 代码仍然指的是 ODBC。

Source = Odbc.Query(...

是的,查询仍然需要 20 多分钟才能完成!

M脚本如下('#'为隐私):

let
    ParamTable = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],
    wsFinal = if Text.From(ParamTable[ENTER VISIT]{0}) = null then "0" else Text.From(ParamTable[ENTER VISIT]{0}),
    Param = "'" & wsFinal & "'",
    Source = Odbc.Query("DRIVER=SQL Server;SERVER=####;DATABASE=####;", 
    "SELECT v.*
    FROM   vwEDImlRowCnt AS v
    WHERE  v.VisitID = " & Param)
in
    Source

有人遇到过这个吗?

我找到了 "problem"。这不是问题。这是 Excel 不必要地混淆事物的方式。

我发现这种情况发生在我通过数据选项卡使用 "From Other Sources" 创建普通 Excel 查询时。

这会默认生成一个通过 ODBC 连接的请求。

但是,当我更改 "connection"(仍然不知道为什么 Excel 调用查询 Connections 和 SQL 查询 Queries) 到 PowerQuery,它实际上 keeps 新 PowerQuery M 中的 ODBC 连接语言.

我的解决方案不是创建查询 "From Other",而是直接在 SQL 数据库中创建查询,这就是我认为我已经完成的。