【问题标题】:Help to make decision on huge reporting帮助对大量报告做出决定
【发布时间】:2009-06-03 05:37:03
【问题描述】:

我想问问你对我的案子的意见。我们有大桌子。我们每月都会对该表格进行报告。也就是说,我们需要下载多达 20000 条记录为 PDF 或 Excel 文件并打印出来。我计划实时生成报告。没有提前一代。这是解决我的问题的好方法吗?或者如果你有更好的想法,我想听听。

谢谢

【问题讨论】:

  • 有什么好的方法可以解决您的问题? AFAICT,您只给出了您的要求 (a) 20,000 条记录; (b) PDF 或 Excel,任何一种打印(!); (c) 实时生成
  • 你忘了说你遇到了什么问题。
  • 我知道这个用户只是在这里寻找一些一般性的建议。
  • 您使用的是什么数据库?你可以使用 SQL Reporting Services 或类似的东西吗?

标签: php reporting


【解决方案1】:

我没有完全理解你的问题;但是当我需要对非常大的表格或多个非常大的表格进行实时报告时,我所做的是预先计算我想要的任何总计。

所以不要像这样的查询:

选择 count(*), sum(items) * price, datefield, type 来自 bigtable bt 在 bt.id=rbt.rbtid 上加入 realbigtable rbt 在“2009 年 1 月 1 日”和“2009 年 1 月 31 日”之间的日期字段 按类型分组,日期字段

我们将有一个存储过程计算每晚的每日总计到第二张表 - 然后它只是将 30 天的预先计算的总计相加的简单问题,而不是计算加入和求和的问题记录。

【讨论】:

    【解决方案2】:

    这取决于您是否要大量生成此 PDF。如果您经常生成此文件,最好将最后生成的 PDF 缓存 15 到 30 分钟,以避免不断处理此“大表”。

    获取所有数据需要一点时间,但如果您不介意延迟,不提前生成数据可能是一个很好的解决方案。

    如果您有很多人访问 PDF,并且不希望延迟,并且数据不会很快发生变化,您可能应该提前生成它。您的生成间隔应该与您的数据过时的速度一致。如果数据可能每天更改一次,那么每天更新通常就足够了。如果数据变化很大,您可能每 30 分钟左右生成一次。

    所以这取决于谁将访问 PDF 以及访问频率。

    【讨论】:

      【解决方案3】:

      如果您要生成这么大的报告,很难想象用户会期望频繁更新。总的来说,我认为人们非常看重能够每天下载一致的可重复视图。事实上,一致性/可重复性通常是不超过每天刷新报告频率然后存储结果的一个很好的理由。

      如果不太可能每天或更频繁地需要给定报告,您可以进行惰性报告生成,存储给定日期第一次创建的副本,并可能使用类似“RepABC_05032009”的文件命名方案.xls”作为给定日期报告的标记。

      【讨论】:

        【解决方案4】:

        20000 条记录实际上并没有那么大,因此“即时”生成肯定可以正常工作(除非检索这些记录的查询很复杂/很慢)。

        我推荐使用 Excel,因为它更容易实现。只需输出 csv 数据(PHP 对此有现成的功能),并发送相应的内容头作为响应。

        使用 Excel 而不是 PDF 的另一个原因是用户可以在打印前进行一些细微的调整和修改(更改横向/纵向布局、行号、添加自定义备忘录等)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-13
          • 2011-10-26
          • 2016-08-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多