集算器帮助报表总计的例子超级多,但大多数划算困难都发出在数码走入报表工具此前,如下边列举的文书总计和SQL扶持中就有广大案例是针对性报表开荒的。除外,还应该有些复杂总计是发出在报表工具环节内,甚至一些并不是由于总结困难招致但足以用数据源总括来解决的表格难点。这里咱们来研究集算器在这里些地方下对报表工具的提携效能。

参数名叫“qyear”

集算器帮忙java管理多样性数据源之JSON,javajson

 
  Java的json开源包日常只好解析json数据,没有运算功用。程序猿自个儿写通用的主次来贯彻分组、排序、过滤、连接这个总结,特别忙绿。比如:用java写json文件原则过滤程序时,当准绳表明式爆发变化时就须要改写代码。若是要兑现象SQL那样灵活的典型过滤,则需求团结完成动态表明式剖析和求值,编制程序工作量极度大。

    集算器是支撑动态表达式的,能够停放到Java中写出通用的json计算程序。下边大家经过例子来看一下具体作法。待管理字符串是json格式的职工新闻,包涵EID、NAME、SURubiconNAME、GENDETiggo、STATE、BIRTHDAY、HIREDATE、DEPT等字段,这几个事例要深入分析数据,按标准搜索壹玖捌肆年十月1日(含)之后出生的女员工。Json字符串内容如下:

    [{EID:1,NAME:”Rebecca”,SURNAME:”Moore”,GENDER:”F”,STATE:”California
“,BIRTHDAY:1974-11-20,HIREDATE:2005-03-11,DEPT:”R&D”,SALARY:7000},
    {EID:2,NAME:”Ashley”,SURNAME:”Wilson”,GENDER:”F”,STATE:”New
York”,BIRTHDAY:1980-07-19,HIREDATE:2008-03-16,DEPT:”Finance”,SALARY:11000},
    {EID:3,NAME:”Rachel”,SURNAME:”Johnson”,GENDER:”F”,STATE:”New
Mexico”,BIRTHDAY:1970-12-17,HIREDATE:2010-12-01,DEPT:”Sales”,SALARY:9000},…]

    达成的笔触是:Java程序调用集算器程序并传到json字符串,集算器深入分析json格式数据造成标准过滤,之后将结果以json字符串的秘技赶回给Java程序。由于集算器协助动态表明式拆解解析和求值,使得Java程序能够像使用sql那样,灵活的过滤json数据。

    举例,大家要求查询一九八五年十五月1日(含)之后出生的女职员和工人,esProc程序能够从表面获得七个输入参数“jsonstr”和“where”条件,如下图:

图片 1

    where是个字串,其值是:BIRTHDAY>=date(1983,1,1State of Qatar &&
GENDEPRADO==”F”。
    esProc代码如下:

图片 2

 
  A1:把json格式数据拆解解析成序表。esProc的购并开采意况足以直观的显得出总结结果,如上图右侧部分。

    A2:遵照标准过滤。这里运用宏来完成动态剖判表明式,当中的where便是流传参数。集算器先总括${…}里的表明式,将总计结果作为宏字符串值替换${…}之后解释推行。那几个例子中最后实践的是:=A1.select(BIRTHDAY>=date(1981,1,1卡塔尔&& GENDEKuga==”F”卡塔尔(قطر‎。

    A3:将过滤之后的序表生成json格式字符串。

    奥迪A4:向外界程序再次来到切合条件的结果集。

    过滤条件发生变化时绝不更换代码,只需改变where参数就能够。例如,条件成为:查询1981年11月1日(含)之后出生的女职员和工人,大概NAME+SUEscortNAME等于”Rebecca穆尔”的职员和工人。Where的参数值能够写为:BIRTHDAY>=date(1984,1,1卡塔尔&& GENDE福睿斯==”F” ||
NAME+SU福特ExplorerNAME==”RebeccaMoore”。实行之后,A第22中学的结果集如下图:

图片 3

 
  由于在Java程序中调用esProc脚本是由此jdbc接口完结的,重临结果是八个ResultSet对象set。拿到set的首先个字符串字段,就是过滤之后的json字符串。具体代码如下:(将上述esProc程序保存为test.dfx):

        //建构连接
         Class.forName(“com.esproc.jdbc.InternalDriver”);
     con= DriverManager.getConnection(“jdbc:esproc:local://”);
     //调用存款和储蓄进程,个中test是dfx的文书名
     com.esproc.jdbc.InternalCStatement st;
     st =(com. esproc.jdbc.InternalCStatement)con.prepareCall(“call
json(?,?)”);
     //设置参数,json字符串较长,省略有个别。
     //在实质上选拔中json字符串大概由各样分歧的章程变通,表明见后。
     String jsonstr=
     “[{EID:1,NAME:\”Rebecca\”,SURNAME:\”Moore\”,GENDER:\”F\”,STATE:\”California\…}]“;
     st.setObject(1,jsonstr);
     st.setObject(2,”BIRTHDAY>=date(1981,1,1) && GENDER==\”F\””);
     //施行集算器存款和储蓄进程
     ResultSet set=st.executeQuery();
     //获取过滤之后的json格式字符串
String jsonstrResult;
if(set.next()) jsonstrResult = set.getString(1);

    Json是网络使用中沟通数据的常用格式,在骨子里运用当中,json字符串可财富于当羊眼半夏件或远程的HTTP服务器,集算器能够一直从文件或HTTP服务器读取json字符串。以HTTP服务器为例,倘诺有二个testServlet可以回到json格式的工作者音信字符串,则可以用下边的代码获取、总结:

图片 4

 
  A1:定义了httpfile对象,url是 

    A2:读取httpfile对象回来的结果。

    A3:解析json格式字符串,生成叁个序表。

    迈锐宝:依据标准过滤数据。

    A5:将过滤后的序表转变为json格式字符串。

    A6:将Cross中的结果重返给调用这段集算器程序的Java代码。

Java的json开源包平常只可以分析json数据,未有运算功效。程序猿自身写通用的主次来兑现分组…

数量源集

动态数据源

报表工具中某些报表使用到的数据源经常是鲜明的,报表的参数日常只用于数据集的选出条件(即SQL的WHERE部分)而不会用来选拔数据源,假如大家希望有个别报表使用的数据源是由参数决定的,那对于绝大许多报表工具来说都能直接到位,常常都亟需运用报表工具提供的API编程才行,极度麻烦。

若是接收集算器就特别轻巧。可将集算器作为报表的一向数据源,然后在集算脚本中再依附参数再决定连接实际的数目源取数据重返。

        

A

1

=${pds}.query("select * from T where F=?",pF)

数码源名称用参数pds进来,报表工具本人不必扶持动态许多据源了。

好像地,有个别报表工具供给主人报表必得用同三个数据源,当要求主子报表用差异数额源时,也足以行使这么些措施,把集算器作为东道主报表的联合数据源,而实在数据源在集算脚本中根据参数决定。

 

动态数据集

报表工具中,报表参数平时会用作多少集选出准则的参数,也正是SQL的参数。但有时大家供给替换SQL的一片段而不能够只用参数,举个例子整个WHERE部分是充当参数字传送入的,那样恐怕得到越来越灵敏的查询条件。

一点报表工具援救宏,能够完毕那一点。对于不帮忙宏的报表工具,就只能再使用报表工具提供的API用代码去改写报表模板的数量集定义,至极繁琐。用集算器就相当粗略:

        

A

 

1

="select * from T" + if(where!=""," where "+where,"")

拼上where,空则不拼

2

=db.query(A1)

 

 固然协助宏的报表工具,某些SQL也对的拼出。比方希望按传入的字段列表做合计,即就要此些字段上拼加sum(卡塔尔(قطر‎,而报表工具日常没有直接转换串的招式,又必须要选取API去管理,或然在上层事前拼好。那时用集算器也都十分轻松处理。

        

A

 

1

=sums.array().("sum("+~+") as "+~).string()

把a,b变成sum(a) as a,sum(b) as b

2

=db.query("select G,"+A1+" from T group by G")

 

取数节制

出于体量有量,大家渴求表格最多抽出10000行数据,若无取完要再补意气风发行标志有“继续”的笔录,那样能够显得出多少是还是不是完全。但报表工具平时只好实施规定的取数语句,这种灵活决定又须要复杂代码调用API来落实。

集算器用代码调节那个进度很自在:

        

A

B

 

1

=db.cursor("select * from T")

=A1.fetch(1000)

 

2

if A1.fetch@0(1)

>B1.insert(0,"继续")

未完成则插入标记

3

>A1.close()

return B1

 

 

Driver class 为”com.esproc.jdbc.InternalDriver”,会用到 dm.jar 等

4、 Birt 开拓工具内新建报表,并扩展 esProc 数据源“esProcConnection”

1、 将中的全体 jar 拷贝至应用的 WEB-INF\lib 下

6、Birt Web 端呈现

1、 基础 jar 集成

raqsoftConfig.
,首要富含集算器授权、脚本文件路线、其余作为集算器数据源的总是配置等。

度,此处用占位符设置。

3、报表数量集扩大数据集参数并与报表参数绑定

当心:标红部分,分化 birt 版本略有分裂

Next,查询脚本输入:{call VerticaExternalProcedures(State of Qatar}

将脚本文件安顿到 raqsoftConfig. 配置的脚本文件主目录下。

with A as(selectCUSTOM,SALESAMOUNT,row_number() over  RANKINGfrom SALES)select CUSTOM,SALESAMOUNTfrom (select CUSTOM,SALESAMOUNT,sum over  AccumulativeAmountfrom A)where AccumulativeAmount>(select sum/2 from SALES)order by SALESAMOUNT desc

开拓工具张开报表,Data Explorer – Report Parameter – new patameter

此处把“寻觅订单贩卖额占到百分之五十的前 n
个顾客,并按贩卖额从大到小排序”,改为务求按年查询,即“按年度查询订单出卖额占到二分之一的前
n 个客商,并按出售额从大到小排序”,因而扩展了参数过滤效果。

2、 编写并配置 esProc 脚本

里头:VerticaExternalProcedures 为 esProc 脚本文件名

2、报表内扩展年度参数

2、 将 raqsoftConfig. 拷贝至应用的 WEB-INF\classes 下

总所周知,有个别数据库未有强大的深入深入分析函数,
有些数据库未有存款和储蓄进度,当碰着复杂的数码计算,往往只可以通过 Python,福特Explorer等外界脚本来达成,但那个脚本语言和主流工程语言集成性不佳,即便直接用工程语言完毕相似SQL
函数和仓库储存进程的职能,经常只是本着有个别总结必要编写制定冗长的代码,代码差十分少不可复用。

留意:配置文件名不可能更改

集算器 JDBC 必要八个底工 jar 包,都足以在 [esProc
安装目录]\esProc\lib 目录下找到,分别为:

报表扩张按年查询的输入参数,参数名叫“qyear”

Preview Results, 这里依据 qyear 私下认可值独有查询 二〇一二 年数据

admin

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注