集算器案例-九游会登陆

任务

客户的订单数据在erp系统中,客户信息在crm系统中,现在需要制作一张报表,用来展示每个客户每年的销售额以及比上年的增长率

报表的数据将来自于2个不同的数据库,可选的报表工具只支持单个数据源,比如ireport,crystal,birt,如下图所示:

用编程的传统方法去实现难度较大, 用集算器开发则轻松简单

步骤

  1. 取数据
    在集算器 ide中设计一个cellset file,进行跨库的运算。
    报表通过标准的jdbc接口来访问cellset file
    和访问hsql等内存数据库一样,
    cellset 文件名等价于存储过程名
  2. 实现过程
    集算器可以同时连接多个数据源,如下例,连接的是erp所在的oracle数据库和mssql数据库

    集算器中可以执行多个sql,比如a1和a7,数据源的名字用来区分不同的数据库

    a1和a7的数据经过一系列运算,在a9合并为单个数据集,右侧是a9中具体的数据。a11表示向jdbc输出a9(可以输出多个结果集)

    因此在报表工具中,仅需要建立1个jdbc数据源,如下图使用的是集算器专用的jdbc driver和url

    接着新建报表,比如选这里的coffee模板

    在wizard中输入sql。注意:“p4”是cellset file的文件名,这里当作存储过程名来用

    执行结果如下:

    之后的制表过程与普通报表没有任何区别,不再详述。 最后我们看一眼最终的报表结果:

    可以看到,集算器能够实现多源数据的整合。 这是因为集算器提供了sql的全部能力,并且可以跨库计算。
  3. 跨库计算
    如下例:
    a5完成了对oracle的计算:每年每个客户的订单金额和比上年的增长率;
    a7:取出了mssql中的客户的id,name,country

    a8:将a5和a7按照id关联起来,


    这一步是跨库关联运算,等同于sql中的left join语句。当然,sql只能同库join,而集算器跨库也可以。 右侧是join的结果,点击蓝色字体可以看到内部成员,比如第一行

    和sql不同的是,集算器可以将”join”和”select”分成2步,比如a9:在join的结果上再”select”

    这种分步特别适合复杂的数据库计算,比如a5:每年每个客户的订单金额和比上年的增长率。用sql必须将复杂的计算一次写出,需要较高的技术能力,分成若干个简单的表达式就容易多了。

  4. 分步计算
    分步计算是集算器的基本能力,如下图所示:

    a1:原始的订单数据
    a2:引用a1,将它按client分组。查看其中的第3组,如下图所示:

    如何将每组中的数据按年汇总? 请看a3: 将每个分组按年再分组,并汇总每个小组的销售额。~代表当前成员。 右侧是执行结果:


    查看第3组,结果如预期。

    a4:增加一列,计算比上年的增长率。用业务语言描述就是: (当年/上年)-1
    执行,查看结果的第3个成员


    注意:samount: 当前成员,当年
    samount[-1]: 上一个成员,上年

    a5: 将各组的成员合并。 至此,oracle中的数据处理完毕


    可以看到,分步可以将复杂的计算目标,分解成简单的计算步骤。 sql不直接支持分步,难以用它进行复杂的数据库计算

    在进行报表的数据准备或数据整理时,常会遇到复杂的数据库计算,此时可以用集算器来解决。除了跨库和分步,集算器还具有网格风格、有序集合、彻底集合化、对象引用等特性。 这些特性使集算器成为更有能力的商业计算开发工具。
网站地图