如何创建连接到仅下载查询数据的 Access DB 的 Excel Pivot?

Posted

技术标签:

【中文标题】如何创建连接到仅下载查询数据的 Access DB 的 Excel Pivot?【英文标题】:How do I create an Excel Pivot connected to an Access DB that downloads only the queried data? 【发布时间】:2014-11-29 13:30:57 【问题描述】:

我有一个大约 60 列和 400,000 行的表格,并且还在不断增加。我们公司的笔记本电脑和 MS Excel 无法处理 RAM 中的这么多数据。所以我决定将数据存储在 MS Access 中并将其链接到 Excel。

然而 Excel 中的数据透视表仍将所有数据下载到 Excel 中,然后对数据执行过滤器和操作。这适用于较少的数据,但现在有更多的数据已经开始出现内存错误。此外,即使数据透视表中的数据可能只有 50 个单元格,文件大小也是 30+ MB...

那么是否可以创建与 Access 的连接,只下载所查询的数据,进行事先操作,然后将修改后的数据发送到 Excel? p>

我在以前的公司中看到了这种设置(Excel 数据透视表只会下载它需要的内容)。但据我所知,它正在查询一个 SQL DB。 (遗憾的是,由于 IT 主管打算成为唯一了解核心运营的人(他基本上以公司的 IT 运营为人质,以换取他的工作保障),因此无法了解更多信息)......但我离题了。

我已经尝试在互联网上搜索了几天,但这是一个非常具体的问题,我在 Google 中找不到:/

任何帮助甚至指点都将不胜感激!

编辑:我只想指出,我正在尝试创建一个 OLAP 连接以进行分析,因此枢轴将更改字段。我对数据透视如何工作的理解是,当我们选择数据透视中的字段时,excel 会设计一个查询(基于选择字段)并将其发送到连接数据库以检索请求的数据。如果这不是它的发生方式,我该如何让这样的事情发生?希望详细说明。

【问题讨论】:

如果查询始终相同,那么我认为@Renaud 的回答很棒。如果您需要更改 Excel 中的 WHERE 子句,您可以在连接中执行此操作,并且使用 MS Query,您甚至可以将参数绑定到工作簿中的单元格:support.office.com/en-us/article/… 感谢@Doug,将研究 MS Query。我还想,当我们更改数据透视表的字段时,excel 会向连接/数据库发送自定义查询(基于我们选择的字段和度量),以便它只发送特定数据,这是正确的吗? 我不这么认为。我的理解是幕后的 PivotCache 包含所有数据。这就是@Renaud 的回答应该有所帮助的原因;我相信它会产生更小的数据透视缓存。 【参考方案1】:

我假设您在 Access 中创建了一个大表来存储所有数据,因此如果您只是将该表链接为数据源,Excel 将不知道哪些特定的数据位是相关的,并且很可能必须自己经历这一切。

相反,您可以尝试不同方法的组合:

创建一个查询,从 Access 中预过滤数据并将该查询链接到 Excel。 为您的连接属性 使用SQL 命令类型 而不是Table。 在 Access 中测试该查询以确保它运行良好且速度足够快。

确保所有重要字段都有索引(您过滤的字段、分组依据的字段、Excel 必须通过以确定是否应包含在数据透视表中的任何字段,确保该字段有一个合理的索引)。

确保您已在 Access 的表中设置主键。如果尚未使用,请使用默认的自动增量ID

如果所有其他方法都失败了,请分解那个巨大的表:与其说是记录的数量太多,不如说是列的数量过多。

如果您在数据透视表中使用计算字段或根据某些条件过滤数据,请考虑在 Access 中的表中添加包含预先计算数据的列。例如,您可以从 Access 运行查询以更新这些附加字段或添加一些 VBA 来执行此操作。

它应该工作得很好:为了给你一个想法,我用 Excel 2013 做了一些测试,链接到一个 250MB ACCDB,包含 33 个字段和 392498 行(股票操作日志):大多数操作Excel 只需要几分之一秒,对于数据最密集的情况可能需要几秒钟。

另一件事:Access 支持pivot tables and pivot charts。如果 Access 足够,也许您不需要 Excel。您可以使用Access Runtime 2013 或2013(它是免费的)作为每台需要访问数据的机器的前端。每个在网络共享上保存数据的front-end can then be linked to the backend 数据库。这些工具比 Excel 中的工具有点笨拙,但它们可以工作。

【讨论】:

谢谢,我会查看链接。是的,我确实制作了一张大表,尽管我确实将其分解为较小的表,但最终我将它们全部关联到一个大查询中。我基本上是在尝试为 BI 分析创建 OLAP 连接。所以硬编码的 SQL 查询意味着我必须为数据透视表中的每个不同视图更改 SQL 查询?此外,我刚刚评论了 Doug 的上述观点,非常感谢您的意见。谢谢:)【参考方案2】:

为避免在 Access DB 中创建查询,另一种可能的解决方案是在 Excel 中使用 PowerPivot 插件,在其中实现查询和规范化。

【讨论】:

以上是关于如何创建连接到仅下载查询数据的 Access DB 的 Excel Pivot?的主要内容,如果未能解决你的问题,请参考以下文章

如何在线获取静态 MS-Access DB 并使用 PHP 连接到它?

如何在 PHP7 中连接到 MS Access 数据库?

将 Java 连接到网络驱动器上的 Access DB

JET OLEDB 参数如何将字符串与 Access DB 中的文本字段进行比较

无法使用 MySQL 连接器/ODBC 将 Access DB 连接到 ODBC DSN

我需要从 mysql 存储过程连接到 Access 数据库来更新我已经在 mysql db 中创建的表