Posted on 2011-11-24 10:04
FineReport——報表技術領跑者 閱讀(771)
評論(0) 編輯 收藏 所屬分類:
Java報表技術知識
一. 橫表&縱表:
數據庫表按照存儲的數據結構不同區分為橫表與縱表,通過如下數據的存儲我們分別對橫表與縱表進行簡單介紹:
橫表:

http://www.finereport.com/forumimages/zjkbwzbszbwhb1.jpg
縱表:

http://www.finereport.com/forumimages/zjkbwzbszbwhb2.jpg
由圖1,2可以看出,若我們要將每種產品的信息羅列在報表中展示,使用橫表將會非常方便,直接將各字段拖進設計器對應標題的單元格即可,字段間不需要考慮任何邏輯關(默認有擴展關系)如下圖:

http://www.finereport.com/forumimages/zjkbwzbszbwhb3.jpg
預覽如下:

http://www.finereport.com/forumimages/zjkbwzbszbwhb4.jpg
二. Java報表軟件FineReport實現縱表轉為橫表顯示:
使用縱表時,想達到如圖4的效果,也很簡單:

http://www.finereport.com/forumimages/zjkbwzbszbwhb5.jpg
其中:
單元格 列名 設置屬性
A2: 字段編號 默認
B1: 名稱 設置為從左向右擴展,其余默認
B2: 屬性 不擴展,其余默認
只需要設置名稱字段為橫向擴展,邏輯關系使用默認的,在展示數據時,就會對應選擇出字段編號為A2,名稱為B1的屬性值,如下圖所示:

http://www.finereport.com/forumimages/zjkbwzbszbwhb6.jpg
便達到了數據庫表為縱表時轉變為橫表顯示。
三. 潤乾實現縱表轉為橫表顯示:
潤乾報表在該問題有兩種解決方案:
一. 參考潤乾官網--à知識庫中---à數據庫為縱表時轉為橫表展現的設計方法:
定義了兩個數據集ds1,ds2,都取用數據庫中的那個縱表:

http://www.finereport.com/forumimages/zjkbwzbszbwhb7.jpg
B2:=ds1.dselect(字段編號) //相當于select distinct ……,取所有不重復的”字段編號”值,或者用=ds1.group(字段編號)用字段編號分組
C1:=ds1.dselect(名稱) //取所有不重復的”名稱”值
C2:=ds2.select(屬性,,ds2.字段編號==B2&&ds2.名稱==C1) //用橫軸”字段編號”,縱軸”名稱”作為篩選條件,把唯一的”屬性”值取出來 。
結果預覽如下:

http://www.finereport.com/forumimages/zjkbwzbszbwhb8.jpg
四. 總結:
由上可以看出,Java報表軟件FineReport與潤乾都可以使用簡單的交叉報表來實現數據庫表為縱表時轉變為橫表來顯示:
l 操作都很簡單,步驟也基本類似
l 潤乾使用數據表字段時默認為列表型,而Java報表軟件FineReport默認為分組,后者更貼近用戶的需求,大部分用戶制作的是復雜的自由報表,所以通常需要合并相同項
文章轉自:http://blog.vsharing.com/fanfanzheng/A1449895.html