Jasper画交叉表

建立DataSet

先建立DataSet,也可以是用默认的主DataSet(直接使用Field),建立好之后,这里我建立的数据以下面为例

Field.png

注:我下面用到的字段不包含subGroup

创建交叉表

选择交叉表,拖入Summary的Brand

这里似乎只能是在Summary的Brand中加入交叉表,放入Detail的Brand会报错

选择交叉表.png

选择交叉表之后会弹出选择数据源的框,选择对应的数据源。

点击NEXT,会继续让选择列,这里选择数据源中的product

交叉表Columns.png

注意这里有几个选项在product后面

  • Order:表示排列的顺序

  • Total:表示总计的位置,如果没有选择none

  • Calculation:计算属性,这里是不能改的

然后选择行,和列一样的操作,一样的属性,这里不赘述

然后是选择值,这里的值是指下面标红的部分

交叉表的值.png

这里就只有一个属性Calculation,这个值是可选的,根据你选择字段的类型不同有不同的值,如字段类型是Integer的时候有sum,count,Lowest等属性,这里选择需要对传进来的字段值进行处理的方式,这里以sum为例

再点击NEXT就是到选择交叉表的样式的阶段了,这里不赘述

画好的交叉表如下:

画好的交叉表.png

使用Java填充数据

首先构造数据

//构造数据
List list = new ArrayList(9);
list.add(new DataTem("测试部门", "张三", "产品1", new BigDecimal(5)));
list.add(new DataTem("测试部门", "张三", "产品3", new BigDecimal(5)));
list.add(new DataTem("测试部门", "张三", "产品2", new BigDecimal(5)));
list.add(new DataTem("测试部门", "张三", "产品1", new BigDecimal(5)));
list.add(new DataTem("测试部门", "李四", "产品2", new BigDecimal(6)));
list.add(new DataTem("测试部门", "李四", "产品3", new BigDecimal(6)));
list.add(new DataTem("测试部门", "李四", "产品2", new BigDecimal(6)));
list.add(new DataTem("测试部门", "李四", "产品2", new BigDecimal(9)));
list.add(new DataTem("测试部门", "李四", "产品2", new BigDecimal(6)));

这里以导出HTML为例:

这里的.jasper文件是.jrxml编译后的文件

String jrxmlPath = "jrxml地址";
String jasperPath = "jasper地址";
try {
    JasperCompileManager.compileReport(jrxmlPath, jasperPath);
    JasperPrint jasperPrint = JasperFillManager.fillReport(absJasper, new HashMap(0),new JRBeanCollectionDataSource(list));
    JasperExportManager.exportReportToHtmlFile(jasperPrint, "生成的HTML地址");
} catch (JRException e) {
    e.printStackTrace();
}

也可以这样写,不指定jasper地址,用JasperReport对象替换他

String jrxmlPath = "jrxml地址";
try {
    JasperReport jasperReport = JasperCompileManager.compileReport(jrxmlPath);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(0), new JRBeanCollectionDataSource(list));
    JasperExportManager.exportReportToHtmlFile(jasperPrint, "生成的HTML地址");
} catch (JRException e) {
    e.printStackTrace();
}

导出的效果


交叉表结果.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容