代码之家  ›  专栏  ›  技术社区  ›  FrustratedWithFormsDesigner

大型数据集的报告工具/查看器

  •  2
  • FrustratedWithFormsDesigner  · 技术社区  · 14 年前

    我有一个数据处理系统,可以生成关于它处理的数据的非常大的报告。所谓“大”,我的意思是这个系统的“小”执行在转储到一个csv文件中时会产生大约30MB的报告数据,而一个大的数据集大约是130-150MB(我敢肯定有人对“大”有更大的概念,但这不是重点……;)

    Excel以数据列表的形式为报表使用者提供了理想的界面:用户可以动态地过滤和分段数据,以查看他们感兴趣的特定详细信息(因为他们对成千上万行并不真正感兴趣,他们知道如何应用多个过滤器来获取他们想要的数据),他们还可以添加n报告的注释和标记,创建图表、图形等…他们知道如何做到这一切,如果我们只给他们数据,让他们做到这一点就容易多了。

    Excel非常适合小型测试数据集,但它无法处理这些大型数据集。是否有人知道一个工具可以提供类似于Excel数据列表的界面——在多个字段上动态创建和更改过滤器的能力;但是可以处理更大的文件?

    我尝试的下一个工具是MS Access,发现访问文件膨胀很大(30 MB的输入文件导致大约70 MB的访问文件,当我打开文件时,运行一个报告并关闭它,文件在120-150 MB!),导入过程很慢而且非常手动(目前,csv文件是由运行主进程的相同plsql脚本创建的,因此我几乎没有干预)。我还尝试了一个带有链接表的Access数据库,该数据库表存储报表数据,速度慢了很多倍(出于某种原因,sqlplus可以在一分钟内查询并生成报表文件,而对于相同的数据,Access需要2-5分钟的时间)。

    (如果有帮助,数据处理系统将用pl/sql编写,并在Oracle10g上运行。)

    4 回复  |  直到 11 年前
        1
  •  2
  •   Kevin Ross    14 年前

    在这种情况下,访问将是一个很好的工具,因为它不像Excel那样具有实际的行限制。当人们习惯了自定义过滤器的功能时,最困难的部分就是让他们不再使用Excel。在Access中很有可能获得近似于此的内容,但除非将Excel控件嵌入表单中,否则将永远不会完全相同。

    对于手动部分,可以编写数据库脚本以使用VBA导入文件。例如,假设您的主要任务是每晚将文件转储到具有新文件的文件夹中。您可以创建一个__watchdog_ access数据库,该数据库的窗体以__ontimer_事件打开,每隔几分钟查看一次该文件夹,当它找到一个新文件时,就会启动导入。当您的用户早上开始工作时,数据已经加载。

    至于膨胀,是的,这可能是一个问题,但你所需要做的是快速压缩和修复文件,它将缩小它。

    编辑:

    您可以通过选项设置要在关闭时压缩的访问数据库。我记不清它在哪里,在工作中,我们只能访问97(但奇怪的是,Office2003)。另一种选择是通过代码压缩。这里有一个链接来解释

    http://forums.devarticles.com/microsoft-access-development-49/compact-database-via-vba-24958.html

        2
  •  2
  •   Matt Gibson    14 年前

    有趣的一个;对于这类问题,中间范围内没有太多。访问应该是这样的,但正如您所发现的,在某些方面是相当糟糕的,对于许多最终用户来说可能有点过于高级。

    另一方面,如果您在那里有一个数据库服务器,那么不使用它的电源似乎是一种耻辱。有几种工具的成本和复杂性各不相同,可以让您设置相当友好的基于服务器的报表,在这些报表中,您可以为用户自己的报表设置参数,然后在服务器上进行筛选,并将结果导出到Excel,如Oracle Discoverer或Microsoft Reporting Services。(可以设置为直接在Oracle数据库上报告,即使它是基于SQL Server的。)

    我们使用Microsoft Reporting Services;我在Developer Studio中构建报表,使用户可以访问网页,根据几个预定义标准中的任何一个进行筛选,运行报表(在服务器上完成艰苦的工作),并将结果导出到Excel以进行进一步的处理。

    一个中途站,在那里您可以设置报告,将初始数据过滤到不到100万行,然后导出到Excel,这可能是一个可行的方法…

        3
  •  1
  •   HLGEM    14 年前

    什么版本的Excel,它现在可以处理相当大的数据量。在Excel2007中,工作表大小为16384列,1048576行。你真的在一份报告中发送了超过一百万条记录吗?为什么,谁会看这样的数据?

        4
  •  1
  •   Charles Williams    14 年前

    我建议您使用Excel前端到共享的RDB后端。
    为Excel构建一个自定义筛选系统(我将使用停在服务器上的vba&ado xla,但有几种技术可用),最终用户驱动它并生成SQL,以将要使用的数据子集(图表、计算、打印等)带回Excel。