一、構造數據源:java
package test; 圖片
import java.util.ArrayList; get
public class CrossReportFactory { it
public static Collection getData(){ io
List<Map<Object, Object>> subGuestName = new ArrayList<Map<Object, Object>>(); class
//第一行A1 test
subGuestNameInit(subGuestName, "C1", "A1","group1", "data1"); import
subGuestNameInit(subGuestName, "C2", "A1","group1", "data12"); List
subGuestNameInit(subGuestName, "C3", "A1","group1", "data13");
//第二行A2
subGuestNameInit(subGuestName, "C1", "A2","group1", "data123");
subGuestNameInit(subGuestName, "C2", "A2","group1", "data1234");
subGuestNameInit(subGuestName, "C3", "A2","group1", "data12345");
//第三行仍是按C一、C二、C3分3列,但卻又按row2分多行
subGuestNameInit(subGuestName, "C1", "A3","g2","d1");
subGuestNameInit(subGuestName, "C2", "A3","g2", "d12");
subGuestNameInit(subGuestName, "C3", "A3","g2", "d123");
subGuestNameInit(subGuestName, "C1", "A3","g3","d11");
subGuestNameInit(subGuestName, "C2", "A3","g3", "d22");
subGuestNameInit(subGuestName, "C3", "A3","g3", "d33");
return subGuestName;
}
public static void subGuestNameInit(List<Map<Object, Object>> subGuestName,String column,String row,String row2,String value){
Map<Object, Object> guestMap = new HashMap<Object, Object>();
guestMap.put("deptid", row);
guestMap.put("deptid2", row2); //第三行繼續劃分使用
guestMap.put("degree", column);
guestMap.put("empid", value);
subGuestName.add(guestMap);
}
}
二、新建一個模版,右擊模版名添加Dataset,選擇Dataset爲剛建立的Dataset。爲Dataset添加fields
三、建立交叉報表
row:
column:
value:
交叉報表建立成功。
但此時數據源還不能夠,還得這樣設置:
右擊Detail中的交叉報表,選擇Dataset run爲"use dataset...",設置Dataset值爲$P{REPORT_DATA_SOURCE}便可使用數據源。
詳細設置如圖:
效果如圖:
最後交叉報表如圖:
結果:
真正使用時隱藏掉紅色部分便可達到要求。