润乾集算报表用脚本实现动态SQL传递

大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一模板。这时就需要在报表中接收相应参数拼接出动态SQL进行查询后制作动态报表。

与一般报表工具需要在第三方程序(如JAVA)中实现不同,在润乾集算报表中提供了内置的脚本(数据集),可以快速完成这类报表,下面举例说明。

某类报表中,用户在指定表和列时,有一些列是必选列,即使用户没有选择,在查询后仍然显示。所以需要在拼接SQL的时候事先判断必选列是否在用户的选出列中,如果不在,则在后面添加,同时要保证用户选出列的次序。

这里以查询某一时间段订单信息为例,其中订单ID、订购日期、发货日期、到货日期为必选字段,使用脚本通过如下步骤完成。

设置报表参数

  应用中已经按照指定的参数格式将表名、字段名和查询条件传递给报表,因而报表参数设置如下:

其中columns值:货主名称,运货商,运货费;

conditions值:where 订购日期>=‘1996-01-01‘and 订购日期<=‘1996-12-31‘

   设置数据集

使用脚本数据集编写脚本进行SQL拼接和取数工作,并返回结果集。

使用集算脚本可以分步编写计算逻辑,而且由于其对集合运算的良好支持使得在A2中将所选字段集合与必选字段集合做并集即可获得所有查询字段,非常简单。其中:

A1:所有必选字段的集合;

A2:将用户选择的字段集合与必选字段集合求并集,以保证保证所有必选字段都能选出;

A3-A4:执行拼接好的SQL取数;

A5:为报表返回结果集。

   编辑报表表达式

由于报表列都是动态的,无法事先制作固定列的报表,需要使用动态列函数。

这里使用了ds.fname()和ds.field()函数实现动态列报表,具体用法可参考集算报表相关文档。最后将辅助的A列和第一行隐藏即可完成报表制作。

时间: 2024-11-07 20:41:15

润乾集算报表用脚本实现动态SQL传递的相关文章

润乾集算报表多样性数据源之动态SQL传递

大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一模板.这时就需要在报表中接收相应参数拼接出动态SQL进行查询后制作动态报表. 润乾集算报表提供了两种处理动态SQL的方法,使用宏和集算脚本,可以快速完成这类报表,下面举例说明. 使用宏 集算报表提供了宏机制,通过在动态宏中拼接SQL后交由数据集查询结果,最后在报表中使用动态表达式获得字段名和字段值完

润乾集算报表的脚本数据集

润乾集算报表提供了一种新的数据集类型--脚本数据集,同意用户在数据集中完毕数据的进一步计算和加工,为报表提供数据源支持. 以下详细来看一下脚本数据集. 什么是脚本数据集? 集算报表的一种数据集类型.能够在脚本数据集中编辑计算脚本(脚本遵循集算器语法)完毕数据计算和处理,将加工后的结果集为报表提供数据源支持,从而使报表工具获得数据源再计算的能力. 脚本数据集编辑器中即无法像集算器编辑器一样添加删除行列.也无法进行可视化调试,所以脚本数据集适用于计算脚本比較简单的情况. 怎样使用脚本数据集? 脚本数

润乾集算报表用脚本实现混合数据源报表

润乾集算报表支持在同一报表内使用不同类型的数据源,可以是RDB.TXT文本.Excel.JSON.HTTP.Hadoop.mongodb等.集算报表中使用混合数据源不依赖第三方程序(如JAVA),使用内置的脚本(数据集)即可完成,下面通过例子来说明使用过程. 业务系统中将订单信息存储到JSON格式的文件中,报表查询时需要读取JSON文件与数据库表(维表)进行联合查询.这里以查询某发货时间段内所有订单的客户信息为例. orders.json部分内容如下: 以下为报表设计过程.         连接

润乾集算报表多样性数据源之动态源

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表除了支持不同类型的数据源(RDB.TXT文本.Excel.JSON.HTTP.Hadoop.mongodb)外,还可以根据实际应用情况动态连接不同的数据源完成动态数据源报表的开发.下面通过一个简单实例说明使用过程. 报表说明 应用中需要通过参数控制报表连接的数据源,当参数flag为1时连接数据源一(xmos1),否则连接数据源二(xmos2),查询指定年份到现在的订单情况. 在集算报

润乾集算报表优化应用结构之报表复杂数据源的管理

在报表项目中,常常有些复杂数据计算是为一个报表专用的,其它报表用不到.可以用SQL实现写进报表数据源中,但由于SQL无法分步计算,经常会写出非常复杂难懂的长语句,不利于调试和维护.如果用Java或者存储过程来实现,计算程序会和报表模板又会分开,不利于管理.使用润乾集算报表的脚本数据集来实现报表专用计算,既可以写出简单易懂的分步骤计算脚本,又可以将脚本存放在报表模板中利于管理.系统结构的对比如下图: 下面通过一个具体的报表例子来看一下集算报表脚本数据集的用法.<年度客户销售分析报表>可以选择年份

润乾集算报表使用远程HTTP数据源的示例

报表的数据来源多种多样,有时会接收来自HTTP服务器的数据进行报表展现,一般报表工具只能通过报表自定义数据源使用高级语言(如JAVA)进行处理,实现较为复杂.集算报表简单地通用集算器接收HTTP数据源完成报表展现.这里通过一个实例说明. 学生成绩信息存储在远程的JSON格式文件中,其所在HTTP服务器对外提供统一HTTP访问接口,现需要读取学生成绩信息开发报表,汇总学生成绩并按总成绩排名.报表样式如下: JSON文件中包含班级.编号.姓名.学科.成绩等信息,格式如下: [ { "class&qu

用润乾集算报表实现实时报表(T+0)的方案

在报表项目中,客户越来越关注源数据的实时性,希望看到最新发生的数据在报表中体现出来.但是,传统的报表工具+数据仓库+ETL方式很难做到这一点,往往是只能看到昨天.上周甚至是上个月的情况,也就是T+1.T+7.T+30统称T+n报表.很难实现T+0报表,也就是能体现实时信息的报表. 分析其原因在于:1.如果报表的历史数据和最新数据都从客户的生产系统读取,虽然可以实现T+0报表,但是会对生产数据库造成压力,影响客户的业务.2.如果采用数据仓库的方式,那么ETL从生产库中取出数据,需要较长的"窗口时间

润乾集算报表优化应用结构之混合数据源

在报表项目中,报表源数据常常会来自于多种异构数据源.例如:关系型数据库(oracle.db2.mysql),nosql数据库(mongodb),http数据源,hadoop(hive.hdfs)甚至是excel或者文本文件.通常的做法是采用ETL工具,将这些数据源都同步到数据仓库中.但是这样做的问题在于:1.配置复杂,难度较大:2.成本较高:3.数据无法实时访问,需要有较长时间的延迟:4.数据仓库的建设和管理都比较复杂:5.如果数据量很大效率会很低,而且要不断的ETL去各个应用系统同步数据:6.

润乾集算报表交互分析之多层自动钻取

交互分析过程中报表多层钻取的情况很常见,如从一级汇总数据钻取到二级汇总数据,从二级汇总数据钻取到三级汇总数据-.,钻取时可以从表格到表格,也可以从统计图到统计图.开发这类报表时如果每个层级都需要制作不同的报表,在层数较多时,无论对于开发还是维护都是很麻烦的事,如果能制作一个通用的模板完成所有层级报表的展现则事半功倍. 润乾集算报表通过内置的集算引擎可以快速完成多层钻取通用报表模板的开发.下面通过一个示例说明使用过程. 多层钻取往往在一个维度上逐级细化,如这里我们以订单表中5个地区层级为例(可以扩