精华内容
下载资源
问答
  • 集算报表继承了润乾报表的宏机制来处理动态报表,对于简单的动态报表使用宏实现非常方便。对于一些复杂的动态报表,集算报表还提供了脚本数据集来处理动态报表,适合宏无法实现的场景,而润乾报表中要实现复杂动态...

            集算报表继承了润乾报表的宏机制来处理动态报表,对于简单的动态报表使用宏实现非常方便。对于一些复杂的动态报表,集算报表还提供了脚本数据集来处理动态报表,适合宏无法实现的场景,而润乾报表中要实现复杂动态报表时则需要编写自定义数据集来完成。下面通过几个例子来详细比较一下集算报表和润乾报表在处理动态报表时的相同与不同点。

    相同点

            集算报表和润乾报表都提供了宏,使用方式几乎完全一致,且都包含普通宏和动态宏。

            普通宏常用于静态内容替换,如在员工表中同时只希望查看薪金或奖金,开发两张报表显然是繁冗的,使用普通宏在一张报表来完成很简单,如下报表:


            预览报表输入参数和宏:

            当参数arg1值为BONUS,宏macro值为BONUS时,可得到如下报表结果:

            当参数arg1值为SALARY,宏macro值为SALARY时,可得到如下报表结果:

            相对普通宏只能替换静态内容,动态宏则可以编写动态表达式,完成动态内容的替换,从而完成动态报表制作。比如这样的动态报表,针对指定表根据用户选择的字段和条件进行查询,报表中显示选择的字段及其数据。由于字段和条件都是动态的,所以需要先在报表中将SQL拼好再交由数据库进行查询,这时就需要在动态宏中进行拼接。如下报表:

            其中报表参数和宏设置为:

            输入cols值:订单ID,客户ID,订购日期,发货日期,到货日期,运货费

            输入where值:where 货主地区='华北' and 货主城市 in ('北京','天津','张家口','秦皇岛')

            其值为:"select"+cols+" from 订单"+where,宏类型为动态宏。

            设置数据集SQL为:${sql},预览报表可以得到如下动态报表结果:

            以上为使用宏(普通宏和动态宏)开发相对简单(只静态内容或通过简单的表达式完成)的动态报表,而对于复杂的动态报表,往往需要经过复杂计算才能完成,而这类复杂情况使用宏往往很难甚至无法完成,这时集算报表和润乾报表处理的方式则有很大不同。

    不同点

            集算报表提供了脚本数据集的方式可以完成上述提到的复杂动态报表的开发,由于脚本内置且语法简单,很容易处理这类报表。而润乾报表只能通过自定义数据源在JAVA中完成,使用的简易性则略逊一筹。下面还是通过例子来看一下。

            由用户针对特定表指定选择列和条件,如用户在订单表中选择列时,订单ID、雇员ID和订购日期是必选列,即使用户没有选择,在查询后仍然显示。这就需要在拼接SQL的时候事先判断必选列是否在用户的选出列中,如果不在,则在后面添加,同时要保证用户选出列的次序。

            通过宏实现的难点在于,由于需要判断每个必选列是否在用户选择字段的列表中,如果没有则附加,有多少个必选列就要比较几次,在必选列较多的时候非常复杂。

            下面是集算报表通过脚本数据集的实现(报表参数与表达式与上例一致):

            上述脚本在A2中将所选字段集合与必选字段集合做并集即获得了所有查询字段,拼接SQL进行查询后为报表返回结果集,过程很简单。

     

            而润乾报表在这种情况一般要采用自定义数据集了,下面是润乾报表通过自定义数据集的实现(主要代码):

    <span style="font-size:14px;">public class QueryData implements IDataSetFactory {
    	public DataSet createDataSet(Context ctx, DataSetConfig dsc, boolean isinput) {
    		Map map = ctx.getParamMap(false); // 获得当前报表的所有参数对照表
    		String cols = "";
    		String where = "";
    		if (map != null) {
    			Iterator it = map.entrySet().iterator();
    			cols = map.get("cols").toString(); // 获取参数值
    			where = map.get("where").toString(); // 获取参数值
    		}
    
    		DataSet ds1 = new DataSet("ds1");
    		Connection con = null;
    		try {
    			con = ctx.getConnectionFactory("demo").getConnection();				Statement stmt = con.createStatement();
    			String sql = "select " + cols + " from 订单 " + where;
    			ResultSet rs = stmt.executeQuery(sql);
    			ResultSetMetaData rsmd = rs.getMetaData();
    			int colCount = rsmd.getColumnCount();
    			//设置列名
    			for (int i = 1; i <= colCount; i++) {
    				ds1.addCol(rsmd.getColumnName(i));
    			}
    
    			//设置数据集数据
    			if (rs != null) {
    				while (rs.next()) {
    					Row rr = ds1.addRow();
    					for (int i = 1; i <= colCount; i++) {
    						rr.setData(i, rs.getObject(i));
    					}
    				}
    			}
    			rs.close();
    			stmt.close();
    			con.close();
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    		return ds1;
    	}
    }
    </span>

           上述自定义数据集首先获取了报表参数和当前数据源连接,其次根据参数拼接出要执行SQL,而后根据获得的ResultSet为数据集分别设置列名和数据,最后返回创建的数据集。在使用时,将编译后的class(QueryData.class)放到应用的classpath中方才完成。 

           通过以上实现过程可以看到,对于复杂的动态报表(如上例),使用脚本数据集实现更为简单,除了其拥有简洁的语法,脚本数据集内置在报表中无需其他程序文件附加,则更为便捷。



    展开全文
  • DynamicJasper创建动态报表

    千次阅读 2014-04-15 22:59:48
    前一阵公司要求用DynamicJasper做动态报表

    入职不久,公司要求用DynamicJasper做动态报表,之前的报表都是用Ireport画好模板,再从程序写入数据,Ireport都没接触过的我可犯了难,各种百度各种找文档找例子,网上的相关资料真是少的可怜,最后结合某个网站上的例子(具体真忘了是啥了,当时着急做也没仔细记),和jar包里的API,总算是做出来了,废话不说了,进入正题;

    首先下载jar包,添加,就不详述了,百度也都有;

    贴出代码:

    //创建需要用到的对象
    DynamicReport dr;
    JasperReport jr;
    JasperPrint print = null;
    HashMap hm = new HashMap();
    FastReportBuilder drb = new FastReportBuilder();
    
    drb.addColumn(String ColumnName,String FieldName,String ClassName,int ValueLength);//参数分别是列名,列对应数据字段,值对应类型,值长度,后边还能加几个其他参数,例如Style(表头样式),API中都有列出
    //下面设置一些显示相关的属性
    drb.setPrintColumnNames(true);
    drb.setIgnorePagination(true) ;
    drb.setMargins(0, 0, 0, 0);
    drb.setUseFullPageWidth(true);
    
    dr = drb.build();
    
    jr = DynamicJasperHelper.generateJasperReport(dr, new ClassicLayoutManager(), hm);//我用的时候hm就是空的,具体不清楚它能干什么
    
    print = JasperFillManager.fillReport(jr, hm, DataSource);//DataSource是继承JasperReports的一个数据源类(具体记不清了,要看看公司电脑,有意向知道的朋友可以留言)的类,在其中定义数据的写入方式,我用的是循环判断查出的值的字段名称与前边表头设置的字段名称是否一致,一致的话就把该数据写入对应列
    
    //创建报表对象
    JExcelApiExporter exporter = new JExcelApiExporter();
    
    FileOutputStream fos = new FileOutputStream(outFileName);//创建写入报表用的流,outFileName为输出文件名
    
    //设置一些报表属性,其中前三条是必要的
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fos);
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFileName);
    exporter.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, "GB2312");
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
    exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
    exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
    exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
    exporter.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BACKGROUND, Boolean.TRUE);
    exporter.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BORDER, Boolean.TRUE);
    
    //打印报表
    exporter.exportReport();

    Excel的报表就打印完毕了,其中会有一些异常需要抛出或抓取,加上即可,CSV与TXT格式大同小异,只要同上得到print对象后,创建对应报表对象,再设置一些属性即可;

    好吧,第一次写技术博,感觉有些不大清晰,有兴趣的朋友可以留言一起交流,over

    展开全文
  • 润乾报表 报表组 api 动态添加报表
    问题描述:
    客户希望能动态增加报表组的报表项,实现在不同条件下对不同报表的一次性导出。

    解决方法:
    可以通过报表组的相关api接口实现报表组的动态编辑报表项
    报表组编辑主要包括配置报表组中的报表源、设置报表组中的报表项、保存报表组、计算报表组中的报表。  

    报表源可以理解为设计器下图的设置:

    报表项可以理解为设计器下图的设置:


    主要代码如下:
    //新建一个子报表1

             SubReportConfig subReportConfig1=new SubReportConfig();   
             subReportConfig1.setName("report3");   //设子报表逻辑名
             subReportConfig1.setURLType(SubReportConfig.TYPE_RELATIVE);  //设置子报表的url类型,值为“TYPE_RELATIVE”表示相对路径,值为 “TYPE_ABSOLUTE”表示绝对路径,值为 “TYPE_URL”表示为路径为URL,值为 “TYPE_CUSTOM”表示为自定义路径
             subReportConfig1.setURL("cc.rpx");   //设置子报表的url


             SubReportMetaData srm = rg.getReportMetaData(); //定义报表组的元数据信息对象
             srm.addSubReportConfig(subReportConfig1);//增加一个子报表配置信息对象
             rg.setReportMetaData(srm);

           //配置报表项

             ReportGroupItem reportGroupItem1 = new ReportGroupItem();   //新建一个报表项1

             reportGroupItem1.setTitle("sheet3");     //设置报表sheet名称

             reportGroupItem1.setHtmlId("item3");          //设置逻辑名称

             reportGroupItem1.setName("report3"); //设置对应的报表源,在SubReportMetaData中增加了报表源,报表源的逻辑名为:report3

             rg.addItem(reportGroupItem1);    //把报表项添加到报表组中

    //保存报表组


              ReportGroup.write("d:/test1.rpg", rg);

                     
                     //报表组计算引擎
                 GroupEngine groupEngine = new GroupEngine(rg,cxt); 
                   //导出类设置
                 IdeReportExporter re1 = new IdeReportExporter("D:/test.pdf",(byte) (ReportExporter.EXPORT_PDF),null);
                     
                 re1.exportReportGroup(groupEngine);
    展开全文
  • iReport动态报表

    千次阅读 2014-05-29 13:52:56
    所谓动态报表,顾名思义就是指报表的列头、列数和列内容不是固定的,具体的数据是程序动态生成的。我们知道jasperreport的基本用法是用iReport画出模板jrxml然后编译成jasper,然后在程序里充填数据生成PDF或者...

    文章来源:http://blog.sina.com.cn/s/blog_46552dd90100g8lw.html

    最近一直在研究jasperreport,今天终于搞定了动态报表问题。

    所谓动态报表,顾名思义就是指报表的列头、列数和列内容都不是固定的,具体的数据是程序动态生成的。我们知道jasperreport的基本用法是用iReport画出模板jrxml然后编译成jasper,然后在程序里充填数据生成PDF或者其他格式的报表。但如果报表的列数不确定,就无法事先用iReport画好固定的模板。这时候就必须用到jasperdesign在程序中动态生成报表模板。即用jasperdesign生成模板并编译成JasperReport文件,然后充填数据生成jasperprint以供输出。

    网上有一些的报表是完全用jasperdesign写成的,但这样的报表往往元素比较简单,不容易添加图片或者特殊效果例如斑马纹。比较好的方法是用iReport画出报表中不变的元素,其他需要变化的元素中画出一个标准的以供clone,然后重新设置位置和大小以及expression_r就可以了,工作量比完全重新生成jasperdesign模板小得多,以下是一个例子:

    File file = new File(fileDir);
       JasperDesign jasperDesign = new JasperDesign();
       try {
        jasperDesign = JRXmlLoader.load(file);
        int restWidth = jasperDesign.getColumnWidth()-89;
        int columnNum = strArray.length-3;
        int columnWidth = restWidth/columnNum;
        JRDesignBand columnHeader = (JRDesignBand)jasperDesign.getColumnHeader();
        JRDesignBand detail = (JRDesignBand)jasperDesign.getDetail();
        for (int i=3;i<strArray.length;i++){
         //生成列头
         String para = "$P{para"+i+"}";
         JRDesignTextField textField = (JRDesignTextField)(((JRDesignBand)jasperDesign.getColumnHeader()).getElementByKey("textField-20")).clone();
         textField.setX(89+columnWidth*(i-3));
         textField.setY(89);
         textField.setWidth(columnWidth);
         textField.setHeight(41);
         JRDesignexpression_r expression_r = new JRDesignexpression_r();
         expression_r.setValueClass(java.lang.String.class);
         expression_r.setText(para);
         textField.setexpression_r(expression_r);
         columnHeader.addElement(textField);
         //生成矩形
         JRDesignRectangle rectangle = (JRDesignRectangle)(((JRDesignBand)jasperDesign.getDetail()).getElementByKey("rectangle-24")).clone();
         rectangle.setX(89+columnWidth*(i-3));
         rectangle.setY(0);
         rectangle.setWidth(columnWidth);
         rectangle.setHeight(12);
         detail.addElement(rectangle);
         //生成表内容
         String field = "$F{field"+(i+1)+"}";
         JRDesignTextField textField1 = (JRDesignTextField)(((JRDesignBand)jasperDesign.getDetail()).getElementByKey("textField-24")).clone();
         textField1.setX(89+columnWidth*(i-3));
         textField1.setY(0);
         textField1.setWidth(columnWidth);
         textField1.setHeight(12);
         JRDesignexpression_r expression_r1 = new JRDesignexpression_r();
         expression_r1.setValueClass(java.lang.String.class);
         expression_r1.setText(field);
         textField1.setexpression_r(expression_r1);
         detail.addElement(textField1);
        }
        //删除原有的内容
        JRDesignTextField textFieldDel = (JRDesignTextField)(((JRDesignBand)jasperDesign.getColumnHeader()).getElementByKey("textField-20"));
        JRDesignTextField textField1Del = (JRDesignTextField)(((JRDesignBand)jasperDesign.getDetail()).getElementByKey("textField-24"));
        JRDesignRectangle rectangleDel = (JRDesignRectangle)(((JRDesignBand)jasperDesign.getDetail()).getElementByKey("rectangle-24"));
        columnHeader.removeElement(textFieldDel);
        detail.removeElement(textField1Del);
        detail.removeElement(rectangleDel);
       
        return JasperCompileManager.compileReport(jasperDesign);

     

    需要注意的是,最后要删除事先画好的那几个元素以免重叠。

    PS:斑马纹效果——添加一个矩形设成所需底纹的颜色,大小和单元格一样大,顺序置于文本框后面,文本框设成透明,在矩形的表达式中加入Boolean.valueOf((($V{COLUMN_COUNT}.intValue()-1)/5)%2!=0)即可,我这里是每隔5行显示底纹,可根据需要调整。

    展开全文
  • 本人有用Oracle BIEE做了一张report,数据是通过...在图片中的DateFrom和DataTo那里选择一个日期区间,或者在DateFrom那里选择一个日期,怎么将这个值传入到DataModel里的用SQL Query建立的DataSet里,来实现动态报表
  • 使用JEECG中的动态报表生成报表后,点击导出功能,如果中文查询条件那么这个中文条件在经过JeecgExcelExport 或者 $.ajax的两种传输方式 在后台接收到的数据会产生乱码,为了能够通用性强,我们不可能每次用到就把...
  • 动态报表的制作

    2018-09-19 10:12:59
    在数据信息系统中,常常会看到这样一类报表需求,它们往往格式简单,一般为列表式明细报表,但是要显示的列很多。...这样报表开发工作量就增加了,连吃鸡的时间没有了; 写个存储过程动态计算要显示的...
  • JavaReport生成动态报表

    千次阅读 2016-12-20 00:00:54
    背景介绍在实际中,经常需要生成报表以及导出功能,但是自己实现代价太大,因此使用...传送门,下载JavaReport的包JavaReport优点1、支持实时动态的Web统计报表 2、接口丰富,可以实现良好的图表呈现 3、可以导出多种
  • 润乾 集算报表 用Java动态修改报表数据源 api
  • 动态水晶报表

    千次阅读 2005-11-08 17:59:00
    动态水晶报表 document.title="动态水晶报表 - "+document.title创建动态水晶报表的官方 VB.NET 程序实例.exehttp://blog.csdn.net/haibodotnet/archive/2003/12/11/21546.aspx创建不受数据库限制的报表...
  • 动态报表的制作

    千次阅读 2018-07-16 10:11:25
    接触过很多客户,在没有数据系统以前,很多报表都是用excel画的。这些excel表,大部分是业务人员为了方便记录数据直接画的,在这样画出来的表样中,分组合并单元格相当自由不受约束。而当业务人员把这些excel交给...
  • 集算报表支持交叉报表的制作,报表既纵向分组扩展又横向分组扩展,在交叉区域对统计项进行汇总,但如果需要在纵向分组时要求每个组跟随一个横向表头并且根据纵向分组的不同横向扩展出的表头也要相应变化,这样的需求...
  • 动态水晶报表

    千次阅读 2004-11-08 10:58:00
    创建动态水晶报表的官方 VB.NET 程序实例.exehttp://blog.csdn.net/haibodotnet/archive/2003/12/11/21546.aspx创建不受数据库限制的报表http://blog.csdn.net/babyt/category/39074.aspx也可以创建一些空的公式字段...
  • Visual Basic实现动态报表

    千次阅读 2005-03-02 18:14:00
    Visual Basic中如何实现动态报表是一个在众多VB网站论坛上提问频率很高的问题,在实际项目中, 作者也遇到这个问题, 经过一番深入研究,用一种简单的方法在Visual Basic中实现了动态报表。 Visual Basic中制作报表的...
  • 使用PowerBuilder实现动态报表

    千次阅读 2015-03-14 01:13:49
    使用PowerBuilder实现动态报表   发布时间:2004.12.22 14:28 来源:PB编程俱乐部 作者:赛迪网 在通常的管理信息系统开发过程中,总是没完没了的报表需要制作...
  • 报表应用中有时需要动态控制行高或列宽以满足特定需要。如分组报表中要求每个分组的总高度 / 宽度固定不变,这样一来就能实现每页纸打印相同数量的分组。 润乾报表可以在行高列宽属性中编写表达式,从而实现动态...
  • ReportViewer动态报表开发完整步骤

    万次阅读 多人点赞 2015-05-17 16:08:19
    本人多年没有写ASP.NET C#代码了。这几年在做数据库和商务智能这块。反正朋友说网站不难,就个简单的展现网站,于是就答应了,找了一天到他们公司去听具体的开发需求,听了需求后,觉得难道不是很大,主要的难点...
  • 数据库与Excel报表动态生成

    千次阅读 2014-09-20 14:00:08
    数据库与Excel报表动态生成 (1)读取数据库的数据动态生成Excel报表,这是JSP应用中常遇到的问题,本节采用的基本方法是: 在Excel工作薄中,将报表模板制作在第一张工作表中,从数据库中读取数据,利用POI组件...
  • 相信动态列的实现困扰了很多人,大数据量,多字段的加载将会非常耗时,数据又做不到真正的动态灵活。现有的方式是通过变向的隐藏等方式来实现。 那该如何解决呢?这里分享帆软报表设计器FineReport的实现方案,...
  • 如何利用FineReport制作动态报表

    千次阅读 多人点赞 2016-08-24 11:40:12
    在对数据字段进行分类管理时,利用动态树折叠数据是一个很好的方法,也就是点击数据前面的加号才展开对应下面的数据.
  • 报表设置 jeecg 动态在线报表

    千次阅读 2016-10-29 19:53:40
    select distinct trim(teacher) name,count(bc) value, case when teacher ='333 then '#FF0000' when teacher ='111' then '#D87093' else '#43CD80'  end color, ... min(str_to_date(CONCAT(year,'/',month,...
  • 今天自己试着用了那个链接服务器读取了另外一台数据库的数据,试着做了个简单的报表。 但是现在我希望能实现它自己刷新报表什么好的办法麽? 看了个power view闹不清楚干嘛的。
  • C#中为水晶报表动态动态设置数据源

    千次阅读 2010-02-08 10:21:00
    之前在论坛中经常人问起在VS2005中使用水晶报表(Crystal Report 10)如何用DataSet实现动态的数据源绑定?关于这个问题我研究了一下,找到了新的解决方案。 在以前VS2003中可以采用PUSH模式推报表,可以用如下的...
  • 是做报表的,为什么别人做出来的报表就能得到老板的肯定,而我幸幸苦苦加班熬夜做出来的报表老板连看不看一眼!居然还吐槽我技术不过关,做出来的报表又多又丑…… 朋友就纳闷了:做的报表多还成我的错了...
  • .Net下动态报表生成实现

    千次阅读 2007-08-08 14:12:00
    在做报表项目时,有时不仅要满足用户的需求,而且要求软件要一定的适应性,这就往往就要求报表动态地生成. 最近在做一个项目时,就碰到这样子的问题.系统要在不现的地区使用,不同的地区下属单位是不一样的,而报表中...
  • DevExpress.XtraReports报表动态设置报表布局 引言 上回负责报表这块,说不能再像以前的项目一样的做报表了,以前项目300多张报表,一张一张的画,一张一张的写存储过程,工作量大啊,当然现在的项目...
  • 我们知道,使用easyui可以很容易的生成datagrid,代码如下: _queryGrid = $("#datagrid_queryReport").datagrid({ url:urljson, queryParams:parData, fitColumns:true, width:$(window).width() - 5, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,427
精华内容 28,170
关键字:

动态报表都有哪些