最近有人要求我使用 Excel 制作一个实时项目,该项目会产生大量数据。我将这些数据存储在 SQL 表中,并成功将其导入 Excel。
Excel 上的 SQL 表:
然后,根据前三列(表的主键),我想要获取相应的值并将其放入单元格中。
为此,我使用了以下公式:
=XLOOKUP(Resumo!H$1&Resumo!E$50&Resumo!$B66, (Table_fixed_income_1[bond])&(Table_fixed_income_1[term])&(Table_fixed_income_1[date]),Table_fixed_income_1[value]/100)
它按预期工作,但出现了一个新问题:Excel 现在非常慢。4 个主要列中的每一列都有大约 4500 行,导致 18k 个唯一单元格计算(大约需要 5-10 分钟)。考虑到 SQL 中的数据是一个小型测试表,而生产表要大得多,问题会变得更加严重。
我想知道是否有办法让指定的项目部分更快。
注意:我已经考虑过的一些建议包括将数据从 SQL DB 直接传输到单元格并使用不同的公式,但我没有丰富的 Excel 知识来接受它。
答案1
以下一些建议或许能满足您的需求:
使用 Power Query 连接到您的 SQL 数据源,添加转换数据的列,并将结果转换为输出格式。这将在一个步骤中处理您的两步方法(连接到数据源然后查找数据),即您只有最终的表格)。
与您的 DBA 讨论如何创建一个存储过程来运行执行转换的查询。这可以利用数据库服务器的功能和速度,只需通过 Power Query 连接和透视数据即可。可以在 Excel 中包含输入参数,这些参数会发送到存储过程进行处理。
答案2
我最近在做的一个项目中也遇到了类似的问题。遇到了同样的问题,由于我试图从 SQL 中提取的数据集的大小,Excel 计算变得臃肿,甚至失去功能。我也依赖于查找公式。
我重新设计了公式以限制波动性,依靠数据透视表,修剪了 SQL 数据集,并且无法使用 Excel 找到实用的解决方案,即使从实时 SQL 连接转换为静态数据集。
然后我开始测试 Power BI,它最终提供了我需要的解决方案。我对许多商业智能软件没有丰富的经验,因此无法推荐哪一款最适合您的需求/约束,但这款软件满足了我的需求(大型实时 SQL 数据集),您的问题似乎类似。
希望这能有点帮助。