Java報(bào)表工具技巧--如何在style Report中制作交叉分組報(bào)表
Posted on 2012-08-29 14:12 思達(dá)商智 閱讀(809) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): Java報(bào)表設(shè)計(jì)交叉表(Cross Tabulations)是一種常用的分類(lèi)匯總表格。使用交叉表查詢,顯示源于表中某個(gè)字段的匯總值,并將它們分組,其中一組列在數(shù)據(jù)表的左側(cè),另一組列在數(shù)據(jù)表的上部。行和列的交叉處可以對(duì)數(shù)據(jù)進(jìn)行多種匯總計(jì)算,如:求和、平均值、記數(shù)、最大值、最小值等。使用交叉表查詢數(shù)據(jù)非常直觀明了,被廣泛應(yīng)用。
交叉報(bào)表是報(bào)表當(dāng)中常見(jiàn)的類(lèi)型,屬于基本的報(bào)表,是行、列方向都有分組的報(bào)表。這里牽涉到另外一個(gè)概念即分組報(bào)表。這是所有報(bào)表當(dāng)中最普通,最常見(jiàn)的報(bào)表類(lèi)型,也是所有報(bào)表工具都支持的一種報(bào)表格式。從一般概念上來(lái)講,分組報(bào)表就是只有縱向的分組。傳統(tǒng)的分組報(bào)表制作方式是把報(bào)表劃分為條帶狀,用戶根據(jù)一個(gè)數(shù)據(jù)綁定向?qū)е付ǚ纸M,匯總字段,生成標(biāo)準(zhǔn)的分組報(bào)表。
例如下圖是典型的分組交叉表格是一份銷(xiāo)售人員銷(xiāo)售情況的匯總表,其中垂直方向是對(duì)銷(xiāo)售收入來(lái)源進(jìn)行的分組(包括銷(xiāo)售地區(qū)、客戶信息), 而水平方向中則是對(duì)銷(xiāo)售收入和平均價(jià)格進(jìn)行匯總。此匯總表復(fù)雜百出,涉及到縱向分組,又涉及到橫向求和。
接下來(lái)看用Style Report 這款java報(bào)表工具如何實(shí)現(xiàn)此表的制作,過(guò)程步驟比較多,請(qǐng)耐心閱讀:
1. 打開(kāi)報(bào)表設(shè)計(jì)器,在工具欄中選擇“新建”。 在“新建資源”對(duì)話框中,選擇“空白表格式報(bào)表”。
2. 在報(bào)表的空白處點(diǎn)擊右鍵菜單,選擇“腳本”選項(xiàng),然后打開(kāi)報(bào)表腳本編輯窗口。
3. 在報(bào)表腳本編輯窗口的“裝載”標(biāo)簽下輸出腳本:
var q1 = runQuery('customers');
var q2 = runQuery('Order details');
以上腳本是將兩個(gè)報(bào)表數(shù)據(jù)查詢('customers' 和 'Order details')中的數(shù)據(jù)存放在q1,q2兩個(gè)變量中。
4. 關(guān)閉報(bào)表腳本編輯窗口,在右側(cè)的工具箱中選擇”表格“組件,放入報(bào)表中。
5. 點(diǎn)擊表格,打開(kāi)右鍵菜單,在右鍵菜單中選擇”表格->轉(zhuǎn)換為公式表“。

下面的步驟中進(jìn)行垂直方向上的數(shù)據(jù)分組設(shè)定,數(shù)據(jù)分組為兩層分組,分別是地區(qū)和客戶。
7. 點(diǎn)擊表格中cell[2,0]單元格(第三行,第一列),在下方的表格屬性窗口中選擇“數(shù)據(jù)“標(biāo)簽,然后在公式輸入框中輸入以下腳本:
toList(q1['state']);
q1['state']是提取“customers”數(shù)據(jù)查詢中的“state"列的數(shù)據(jù),toList 函數(shù)的作用是獲取q1['state']中沒(méi)有重復(fù)記錄的所有數(shù)據(jù)。
8. 在屬性窗口,選擇”擴(kuò)展單元格“和”垂直“方向的擴(kuò)展。這個(gè)設(shè)置的作用是將表格單元格按照真實(shí)的數(shù)據(jù)列進(jìn)行擴(kuò)展。
9. 設(shè)置表格單元格的名稱(chēng)為"st",然后點(diǎn)擊”應(yīng)用“按鈕。


通過(guò)以上的步驟,垂直方向上的兩層分組(第一層:state,第二層:company_name)就被建立完成了
13. 按住”Shift“鍵同時(shí)選中 cell[0,3]和 cell[1,3]兩個(gè)表格單元格,然后打開(kāi)右鍵菜單,在右鍵菜單中選擇”表格->合并單元格“。
給對(duì)應(yīng)的表頭加上對(duì)應(yīng)的文字。
Cell[0,1] = '數(shù)量合計(jì)'
Cell[0,2] = '毛利額'
Cell[1,1] = '平均單價(jià)'
Cell[1,2] = '折扣金額'
Cell[5,0] = '銷(xiāo)售合計(jì)'
Merged Cell[0,3] = '凈收入'
14. 創(chuàng)建合計(jì)列,合計(jì)列是指定數(shù)據(jù)列的聚合,合計(jì)列被加入到最低層的分組上。加入下面的公式到對(duì)應(yīng)的表格單元格中。
在 Cell[3,1]單元格中插入:
sum(q2['Quantity@Company:$comp']);
在 Cell[4,1]單元格中插入:
average(q2['Price@Company:$comp']);
在 Cell[3,2]單元格中插入:
sum(q2['Total@Company:$comp']);
在 Cell[4,2]單元格中插入:
sum(q2['=Total*Discount@Company:$comp']);
設(shè)置Cell[3,2]表格單元格的名稱(chēng)為:"grossRevenue"
設(shè)置Cell[4,2]表格單元格的名稱(chēng)為:"discountRevenue"
15. 創(chuàng)建凈收入數(shù)據(jù)列,"凈收入=總收入-折扣金額"。首先合并表格單元格,按住”Shift“鍵同時(shí)選中 cell[3,3]和 cell[4,3]兩個(gè)表格單元格,然后打開(kāi)右鍵菜單,在右鍵菜單中選擇”表格->合并單元格“。然后在合并的表格單元格輸入以下腳本:
$grossRevenue-$discountRevenue;
16. 設(shè)置合并的表格單元格的名稱(chēng)為”netRevenue“ ,凈收入為每個(gè)地區(qū)中客戶的凈收入。
17. 設(shè)置Cell[2,3]表格單元格的腳本為:
sum($netRevenue);
此凈收入為每個(gè)地區(qū)的合計(jì)
18. 設(shè)置Cell[5,3]表格單元格的腳本為:
sum($netRevenue);
此凈收入為所有地區(qū)的總計(jì)
