我的编程空间,编程开发者的网络收藏夹
学习永远不晚

BIRT中怎么根据参数动态拼接SQL

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

BIRT中怎么根据参数动态拼接SQL

这篇文章的内容主要围绕BIRT中怎么根据参数动态拼接SQL进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!

BIRT可以使用sql query来创建数据集,通过在报表中设置参数(Parameter)来传递客户端的用户输入,同时可以设置Dataset参数并且与报表参数关联(这两个参数是不同的),这样可以将客户端的用户输入传递给Dataset的参数供sql query的where语句使用,这是通常的创建sql语句的做法,但是这种方法只适合固定的sql语句,对于拼接动态的sql就不适用了。

比如要处理这么个场景:根据传入的用户名、起止日期,分级别查询出不同的订单信息。author存储用户部门信息,account存储账目信息(多个用户可归属于一个账目,以逗号分隔),META存储订单明细。示意图如下:

BIRT中怎么根据参数动态拼接SQL

传入登录参数login_user,判断部门级别

当级别为manager,需提前获取当前账目

当部门为admin,统计所有账目、用户销售额

当部门为manager,统计当前账目下所属的用户销售额

当部门为engineer,只统计自己销售额

BIRT可以通过一个间接的方式来实现:在DataSet的Script页签下选择beforeOpen事件,通过编写JS脚本来动态拼接SQL,类似代码如下:

...

var query = "select ITEMS,USERS,sum(AMOUNT) as TOTALAMOUNT from META where ORDERDATE>=? and ORDERDATE<=?";

var user = reportContext.getParameterValue("login_user");

...

if(flag == "admin"){

        ...

        query += " group by ITEMS,USERS";  

}else if(flag == "manager"){

        ...

        query += "and ITEMS ='"+ account +"'";

        query += " group by ITEMS,USERS";

}else{

        ...

        query += " and  USERS = '" + login_user + "'";

        query += " group by ITEMS,USERS";

}

this.queryText = query;

...

这种硬编码的方式会造成计算逻辑与展现之间耦合度过高,要么需要大量修改报表文件,要么需要每个报表继承一个公共的库文件,代码写起来非常复杂,在报表数量、开发人数较多时,难以管理、修改和维护。

更好的方式是引入一个显式的数据计算层,在其中提供可解释执行的脚本功能,把数据源计算独立出来(所有的业务逻辑判断和批量数据计算都放在这一层,最后将计算结果直接返回给BIRT的DataSet进行报表展现即可)。

集算器就是这么个数据计算中间件,它提供丰富的结构化数据集运算功能,可以很方便地实现批量数据计算和各类动态SQL拼接。比如上面的问题,集算器SPL代码则非常简单且直观:


A

B

1

=connect("myDB")

=sql="\"select ITEMS,USERS,sum(AMOUNT) as TOTALAMOUNT from META where ORDERDATE>=? and ORDERDATE<=?"

2

=flag=A1.query("select dept from author where userid=?",login_user).dept

3

if flag=="admin"

>B1=concat(sql,"group by ITEMS,USERS\"")

4

else if flag=="manager"

>B1=concat(sql,"and ITEMS='",A1.query("select accountid from account where find_in_set(?,limits)",login_user).accountid,“'  group by ITEMS,USERS\"")

5

else

>B1=concat(sql,"and USERS='",login_user,"' group by ITEMS,USERS\"")

6

=A1.query@x(${B1},startdate,enddate)

感谢你的阅读,相信你对“BIRT中怎么根据参数动态拼接SQL”这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注编程网网站!小编会继续为大家带来更好的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

BIRT中怎么根据参数动态拼接SQL

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

BIRT中怎么根据参数动态拼接SQL

这篇文章的内容主要围绕BIRT中怎么根据参数动态拼接SQL进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!BIRT可以使用sql query来创建数据
2023-06-03

BIRT中如何根据参数实现动态日期分组

BIRT中如何根据参数实现动态日期分组,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。BIRT一般擅长处理规则一致的数据,若条件不一致的动态运算在报表中是很难实现
2023-06-03

BIRT 统计图中如何根据参数实现 X 轴动态分组

BIRT 统计图中如何根据参数实现 X 轴动态分组,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。报表工具一般擅长处理规则一致的数据,若条件不一致的动态运算在报表
2023-06-03

BIRT怎么配置动态数据源

小编今天带大家了解BIRT怎么配置动态数据源,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“BIRT怎么配置动态数据源”的知识吧。BI
2023-06-03

MySQL动态SQL拼接怎么实现

这篇“MySQL动态SQL拼接怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL动态SQL拼接怎么实现”文章吧
2022-12-16

MyBatis中动态SQL拼接的方法是什么

MyBatis中动态SQL拼接的方法主要是使用if、choose、when、otherwise等标签来实现动态条件拼接。具体来说,可以在mapper.xml文件中使用这些标签来根据条件动态生成SQL语句。例如: