下面通過數據分析軟件FineReport來展示幾個經常用到的報表樣例,來實際領會單元格擴展和父子格設置。
工具/原料
數據分析軟件FineReport7.1.1
大小:148.2M 適用平臺:windows/linux
行式報表—數據縱向擴展
行式報表即清單式明細表,是最常見也是最簡單的報表樣式,如下圖效果:
行式報表利用了報表當中的縱向擴展屬性,展現了一個列表式的表格,該節通過介紹行式報表的實現過程來體驗數據的擴展。
準備數據
數據準備包括兩步,準備數據連接和數據集,FineReport安裝exe的時候會內置一個名為FRDemo的數據連接,連接的是工程下的一個WebReport的ACCESS數據庫,接下來文檔中所有的示例數據全部來源於該數據庫。
連接數據庫FRDemo,我們使用內置數據庫表訂單來製作一張訂單列表。
新建工作薄,添加數據集ds1,SQL語句為SELECT * FROM 訂單。
模板設計
表樣設計
根據實際情況設計表樣,如下圖:
字段綁定
根據表樣中的字段標題將數據集中的字段拖曳至相應單元格中,如下圖:
數據顯示方式
FineReport數據顯示有3種方式:列表、分組和彙總。
列表:如上效果圖所示,即數據以列表的方式展示,不做任何分組處理;
分組:指後面的單元格會根據前面的單元格的數據,進行數據過濾分組,合併相同項顯示;
彙總:指對單元格中的數據進行彙總計算,彙總包括求和、平均、最大值、最小值和個數,只針對單元格中字段時數值類型的單元格。
在效果圖中看到行式報表是以列表的方式展示的,故需設置訂單ID字段的數據顯示方式設置為列表。
注:只需要將最左邊的單元格訂單ID的顯示方式設置為列表即可,在父子格中介紹了,單元格會默認將其左側縱向擴展的單元格作為父格,那麼A2是B2的父格,B2是C2的父格,以此類推,經過數據傳遞,可以看到所有的單元格的父格均是訂單ID所在的A2單元格,所以只需要將A2的數據顯示方式設置為列表,其他的單元格會跟隨該單元格來顯示數據。
單元格樣式設置
由於數據庫中運貨費的是小數形式,為了整齊美觀,可設置其數據格式保留兩位小數,選中F2單元格,在右側下方的單元格屬性表中選擇單元格屬性表-樣式,在格式裡面選擇數字,並設置其保留兩位小數,如下圖:
分組報表—父子格
分組報表就是將報表中的數據按組顯示,即將數據列中相同項合併為一組顯示,如下圖最簡單的分組報表:
新建報表,添加數據集
新建工作簿,添加數據集,SQL語句為:SELECT * FROM [銷量]。
拖拽數據列
將數據列拖拽入相應單元格(默認的就是分組顯示,因此不需要做其他設置),如下圖所示:
設置銷量數據列為彙總-求和,其餘默認。預覽便可看到上方的分組效果了。
總結
由該例子可以看出:
拖拽的數據列默認就是分組顯示的,會將相同項合併起來;
數據列在同一行時,會產生默認的父格關係:同行的單元格會以其左側相鄰的擴展格為父格,就如這邊銷售員默認父格為地區,銷量默認父格為銷售員;
數據列在同一行且來自於同一數據集時,子格會自動將父格作為過濾條件,形成一種附屬關係,就如這邊銷售員會自動羅列在所屬地區下。
交叉報表—數據橫向擴展
交叉表,也是常見的基本報表類型,分組報表只是從上到下將數據分組顯示,而交叉表則是從上到下、從左到右都將數據分組的報表,如下圖:
FineReport天然支持行列對稱,設計交叉表的方法也很簡單。
新建工作簿,添加數據集
新建工作薄,添加數據集ds1,SQL語句為SELECT * FROM [銷量]。
製作交叉表
設計好表樣後,將數據列拖入對應單元格:
縱表頭:地區與銷售員默認縱向擴展實現從上到下分組;
橫表頭:將產品類型與產品設置為從左到右擴展,讓產品橫向分組,實現橫表頭;
數據:根據父子格的概念,銷量會以銷售員為左父格,產品為上父格,自動匹配出銷售員與產品對應的銷量。
預覽即可看到上圖交叉表。
注:此處銷售員與產品對應的銷量是唯一的,因此,直接將銷量拖入單元格即可。
自由報表—自定義父子格
內置的數據庫中有一張僱員表,他有很多字段,這些字段都要顯示在報表中,如果把它顯示在報表的一行上,看起來會很擁擠,如果報表中要顯示圖片字段,把圖片和非圖片字段都顯示在報表的同一行上,會嚴重的影響報表的美觀,這個時候就可以做成自由格式的報表。如下面的訂單統計自由報表:
可以看到,自由報表不像網格式報表或者分組報表那樣規則,其特點是數據庫表中的一條記錄不是分佈在一行上,而是散放在多行上,記錄分塊或者分頁顯示,以提高報表的可讀性和美觀性。
新建工作簿,添加數據集
新建工作薄,添加數據集ds1,SQL語句為SELECT * FROM [訂單]。
表樣設計
自由格式報表相當隨意,按照需要的樣式在對應單元格中拖入數據列即可,如下圖所示:
父格設置
由於數據列不在同一行上,因此不會自動形成父子關係,我們希望客戶ID、訂購日期等數據列能附屬於訂單ID而擴展,同時報表標題及數據列標題也會跟隨訂單ID的擴展而複製。
將B1、B2至B6單元格,父格設為訂單ID單元格。
同樣,C3至C6單元格,也設置父格為訂單ID單元格。預覽即上圖效果。
注:根據父子格原理,D3至E6可以不另設父格,因為他們會自動將C3至C6單元格為左父格。
縱向分組報表
如下圖所示,數據按照地區字段進行了分組,分組後,地區字段作為組的標題,自成一行,這樣的報表我們稱之為縱向分組報表。
實現思路
通過父子格章節,我們知道,數據列在同一行時會自動形成父子關係,若數據列都來自於同一個數據集,就會自動形成附屬關係,產生分組效果。
而縱向分組報表,組頭單獨一行,數據列不在同一行,組頭與數據間就沒有父格關係了,即其他數據列就不會將地區字段作為過濾條件了。
因此,這樣的分組報表,只要將數據字段的父格重新設置為組頭字段,就會產生分組效果了。
打開報表
修改報表樣式
將銷售員與銷量字段剪切至下一行,此時預覽可以看到,數據與組頭並沒有附屬關係。
設置父格
為了使數據分組顯示,選中銷售員數據列單元格,設置其左父格為地區單元格。
由於地區字段作為組的標題,為了凸顯標題,可改變地區字段所在行的背景色,點擊單元格屬性表-樣式,選擇背景選項,設置背景色為黃色,如下圖:
分組彙總
在分組報表中往往需要對組內的數據進行數量彙總,如下圖對每個地區的銷售額進行彙總:
打開報表
設置父格的彙總
在下面加上彙總一欄,對銷量進行求和,並設置“小計”單元格的左父格為地區單元格:
預覽模板,可以看到“小計”一欄跟隨父格地區的擴展而複製,即對擴展出來的每個地區都進行一次小計,圖中藍色部分。
不設置父格的彙總
再加上一欄彙總,不進行父格設置,“合計”單元格無父格:
預覽模板,可以看到“合計”一欄仍然在最下面,是在上方單元格全部擴展出來後才顯示,圖中紅色部分。