建立DataSet
先建立DataSet,也可以是用默认的主DataSet(直接使用Field),建立好之后,这里我建立的数据以下面为例
注:我下面用到的字段不包含subGroup
创建交叉表
选择交叉表,拖入Summary的Brand
这里似乎只能是在Summary的Brand中加入交叉表,放入Detail的Brand会报错
选择交叉表之后会弹出选择数据源的框,选择对应的数据源。
点击NEXT,会继续让选择列,这里选择数据源中的product
注意这里有几个选项在product后面
Order:表示排列的顺序
Total:表示总计的位置,如果没有选择none
Calculation:计算属性,这里是不能改的
然后选择行,和列一样的操作,一样的属性,这里不赘述
然后是选择值,这里的值是指下面标红的部分
这里就只有一个属性Calculation
,这个值是可选的,根据你选择字段的类型不同有不同的值,如字段类型是Integer的时候有sum,count,Lowest等属性,这里选择需要对传进来的字段值进行处理的方式,这里以sum为例
再点击NEXT就是到选择交叉表的样式的阶段了,这里不赘述
画好的交叉表如下:
使用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();
}
导出的效果