我们是否需要编写自己的中间件,或者我们可以使用可用的报告工具

时间:2010-11-03 01:28:50

标签: reporting-services crystal-reports jasper-reports report

以前,我们有一个遗留系统,我们使用C ++代码在Text文件和Excel文件中生成报告。但是,执行手动编码以执行所有原始数据处理和报告格式渲染是一件痛苦的事。

最近,我们成功地将所有原始数据迁移到SQL数据库中。

为避免编写手动代码,我们决定评估以下工具。

  1. JasperReports - 能够帮助我们执行报告格式渲染吗?
  2. OpenReport - 为我们提供对生成的报告的网络访问权限吗?
  3. 目前,我们的原始数据类似于: alt text

    基于OpenReport和JasperReports提供的演示,我相信我们可以生成像

    这样的报告
    Summary Report for Lot 2
    ------------------------
    
    Measurement     Type        Value
    ----------------------------------
    Lead 1          Average     1.30
    Lead 1          StdDev      0.16
    .
    .
    Lead 2          Average     2.08
    Lead 2          StdDev      0.55
    

    但是,这比我们想要的要远一点。我们想要的是能够

    1. 在“平均”类别下取多行Lead 1, 2, 3 ...,并使用逻辑代码函数将它们重新计算为单个Lead行。
    2. 对StdDev ......等其他统计数据执行相同的操作。
    3. 报告格式如下:

    4. Summary Report for Lot 2
      ------------------------
      
      Measurement     Average     StdDev
      ----------------------------------
      Lead            2.33        1.23
      

      到目前为止,我见过的演示中,大多数只是从原始数据库报告1 to 1 mapping。在1 to 1 mapping的中间,我知道可以有一些简单的SQL语句用于过滤和操作。我还没有看到可以执行sophisticated处理的示例。

      我称之为sophisticated的原因,就像在C ++代码中一样,我们需要执行std :: string处理,利用std :: vector,std :: map数据结构和算术运算。我怀疑SQL语句可以执行类似的操作。

      根据我列出的 3 要求,我是否可以使用市场上的可用报告工具生成报告?或者我们需要开发自己的中间件来执行这样的任务? (Perl / Python / ......无论如何)

1 个答案:

答案 0 :(得分:1)

只要您的数据库架构是adequet,您就应该能够在SQL和JasperReports中执行需要的操作。

使用PostgreSQL,您可以执行string manipulation,分组,聚合函数等操作 使用JasperReports,您可以使用Java操作数据,使用子报告等

具体示例可以这样完成:

  • 使用此查询获取数据,仅使用空格前的部分(“潜在客户”):select split_part(measurement_type, ' ', 1), measurement_statistic_type, value
  • 在JasperReports中使用数据透视表 - 它会自动按照您希望的方式聚合数据。

还有纯SQL方法可以完成这项工作。

注意:

  • 确保您设计数据库架构以支持您的报告需求(例如,为什么没有分割measurenet_type,为什么没有两列?measurement_name / measurement_id?)
  • 你无法真正聚合stddev。 stddev的平均值与整个人口的stddev不同。