fastreport?

fastreport 入門教程之交叉報表,這種報表類型是表格結構,意思是它包含著一系列的行和列。

工具/原料

fastreport

方法/步驟

這種報表類型是表格結構,意思是它包含著一系列的行和列。同時它不可預知,表格有多少個行和列。這就是為什麼報表不但縱向增加,而且橫向增加。以下顯示這種類型的報表的例子:

表格的數據如下:

fastreport 入門教程之交叉報表

這個例子中,表格有兩個行和四個列。A和b行的標題,1,2,3,4是列的標題。A1,a2..a4,b1..b4是表格中的數據。我們創建一個數據集,有三個字段,包含如下內容:

a 1 a1

a 2 a2

a 3 a3

a 4 a4

b 1 b1

b 2 b2

b 3 b3

b 4 b4

第一個字段為行序號,第二個字段為列序號,第三個字段為表格數據。當輸出報表時,FastReport在內存創建一個表格,並填入數據。

標題如果有兩層,顯示數據如下:

fastreport 入門教程之交叉報表

報表需要如下數據:

a 10 1 a10.1

a 10 2 a10.2

a 20 1 a20.1

a 20 2 a20.2

b 10 1 b10.1

b 10 2 b10.2

b 20 1 b20.1

b 20 2 b20.2

內存中創建的表格數據如下:

fastreport 入門教程之交叉報表

1、創建交叉報表

現在我們從理論轉到實踐。我們創建一個簡單的報表,數據包含四年來的僱員的薪水。這樣,我們需要一個“CrossTest”的數據表,數據包含如下內容:

Name Year Salary

Ann 1999 3300

Ben 2002 2000

….

在delphi中創建一個新的工程,添加“TTable”,“TfrxDBData”和“TfrxReport”組件。並設值其屬性:

Table1:

DatabaseName = 'c:\Program Files\FastReport 4\Demos\Main'

TableName = 'crosstest.db'

frxDBDataSet1:

DataSet = Table1

UserName = 'SimpleCross'

為了完成交叉報表,我們需要使用組件“TfrxCrossObject” ,此組件在FastReport組件面板上。將他添加到delphi的表單中,不需要設置任何屬性;同時,包含全部可用函數的“frxCross”單元被添加到uses列表中。

進入報表設計器界面,首先連接數據源,再在報表中添加“Db Cross tab”組件。

fastreport 入門教程之交叉報表

通過事件編輯器,設置組件的相關屬性。雙擊組件可以打開編輯器界面。

fastreport 入門教程之交叉報表

圖形中數字區說明

1:可用的數據源下拉列表

2:選擇數據源的字段列表。字段可以被拖拽到3、4、5區域中。

3:生成行標題的字段列表。

4:生成列標題的字段列表。

5:顯示錶格數據的字段列表。

6:表格結構預覽

7:可選項。

在這個界面中,只能通過鼠標進行操作修改。在這個示例中,可以託動鼠標將2區域的字段列表託拽到3、4、5區域。然後點擊確定,顯示結構如下:

fastreport 入門教程之交叉報表

預覽報表,顯示界面如下:

fastreport 入門教程之交叉報表

2、改變顯示

讓我們改變組件的顯示模式。首先我們要做的就是改變標題的顏色,並改變Grand Total 改變為“彙總”。給邊非常簡單,一次選中“year”,“Name”,“Grand Total”組件,點擊按鈕設置顏色,

fastreport 入門教程之交叉報表

頁可以在組件的編輯器中選擇你喜歡的樣式。

fastreport 入門教程之交叉報表

改變“Grand Total” 標題,上擊要修改的組件,從彈出的編輯窗口中修改文字即可。

格式化顯示結果,可選選中第一個單元格(year和name的交叉位置)。點擊右鍵從菜單中選擇“display format”。

fastreport 入門教程之交叉報表

選中需要得顯示格式,然後關閉格式化界面,顯示結果如下圖:

fastreport 入門教程之交叉報表

3、使用函數

在上面的示例中,我們可以看到員工四年的工資以及工資彙總情況,我們還可以使用一下函數:

sum:彙總值和

Max:求最大值

Min:求最小值

Avg:求平均值。

Count:計數

我們示例MIN函數,打開交叉組件編輯器,在6區選擇salary,

fastreport 入門教程之交叉報表

從菜單中選擇最小值。把表格中的彙總字符改為最小值。然後顯示結果:

fastreport 入門教程之交叉報表

4、對結果進行排序

對行和列進行升序排序,如果結果是數字型,則按數據進行排序,如果是字符型,則按字母順序排序。我們可以對行和列分別進行設置排序模式。

我們做個示範,讓year進行降序排列,設置界面如圖(組件設計器):

fastreport 入門教程之交叉報表

顯示結果:

fastreport 入門教程之交叉報表

5、組合標題的表格

我們的示例只有一個行頭和一個列首。現在我們設計一個複雜標題的報表,它可能包含兩個行或列數據。表格包含如下數據內容:

fastreport 入門教程之交叉報表

設置界面如下:

fastreport 入門教程之交叉報表

結果顯示界面如下:

fastreport 入門教程之交叉報表

注:報表自動在每個year最後做一個總計,這個可以在組件編輯器中設置year的“小計”標識。

另外注意,在最後一列我們沒有做中間的彙總統計,實際上,在我們的示例中也沒有這個必要。

fastreport 入門教程之交叉報表

6、調整單元格的寬度

察看前面的示例,可以很清晰的發現,單元格可以自動調整其寬度,以適應最大字符寬度。

然而有時卻不盡人意,如果字符特別的長,這時報表的樣式就變得非常難看。如何解決這種情況呢?讓我們採用3種方法進行處理。

最簡單的方法就是字組件中,將字符設成多行。

Total

for[Value]

可以看到結果如下:

fastreport 入門教程之交叉報表

然而,如果行或列的結果值的字符串長度非常大時,這種方法就不適應了。這就是cross-tab組件為什麼有”Minwidth”,”MaxWidth”屬性參數了。

默認情況下,Minwidth值為0,MaxWidth屬性值是200,這可以在大部分情況下都適用。用戶可以根據實際需要進行對這個值進行設置。

這樣,在我們的示例中,我們設置Minwidth=MaxWidth=50;意思是說單元格在任何情況下都是50個象素值,如果字符串比較小,系統自動調整寬度到50,如果字符串長度比較大,系統還是調整寬度到50,同時,長的部分被分割。顯示結果如下圖:

fastreport 入門教程之交叉報表

第三種就是手動調整單元格寬度。這時,需要設置AutoSize屬性值為false。現在可以通過鼠標改變組件的大小。顯示界面如下:

fastreport 入門教程之交叉報表

記住,如果取消了組件的自動大小屬性,則在報表時,系統不能在調整單元格的寬度和高度,預覽時的結果可能如下圖:

這時,稍微在調整一下單元格的寬度即可。

fastreport 入門教程之交叉報表

7、字體顏色和突出顯示

有時我們需要突出顯示某些結果值,或通過字體顏色進行區分。我們在組報表中測試過突出顯示方法。我們使用條件進行設置突出顯示,這在報表中是非常有用的。

添加突出顯示:在我們的示例中,我們將結果值大於3000的字體顏色改為紅色,選中單元格,在工具覽中點擊按鈕,彈處條件設置對話框。設置參數value>3000,並改變字體顏色為紅色。

fastreport 入門教程之交叉報表

fastreport 入門教程之交叉報表

點擊確定關閉窗口,進行預覽:

同樣,用戶可以設置全部的單元格,行和列的值。

fastreport 入門教程之交叉報表

同為比較常用的報表工具,FineReport對交叉報表的解決方案與FastReport有所不同,具體如下:

1. 概述

交叉表,也是常見的基本報表類型,分組報表只是從上到下將數據分組顯示,而交叉表則是從上到下、從左到右都將數據分組的報表,如下圖:

FineReport天然支持行列對稱,設計交叉表的方法也很簡單。

fastreport 入門教程之交叉報表

2. 製作步驟

2.1 新建工作簿,添加數據集

新建工作薄,添加數據集ds1,SQL語句為SELECT * FROM [銷量]。

2.2 製作交叉表

設計好表樣後,將數據列拖入對應單元格:

fastreport 入門教程之交叉報表

縱表頭:地區與銷售員默認縱向擴展實現從上到下分組;

橫表頭:將產品類型與產品設置為從左到右擴展,讓產品橫向分組,實現橫表頭;

數據:根據父子格的概念,銷量會以銷售員為左父格,產品為上父格,自動匹配出銷售員與產品對應的銷量。

預覽即可看到上圖交叉表。

注:此處銷售員與產品對應的銷量是唯一的,因此,直接將銷量拖入單元格即可。

另:若銷售員與產品對應的銷量不唯一,則將銷量數據列的顯示方式設為彙總-求和,詳細請查看數據顯示方式。

2.3 其他設置

排序、突出顯示以及字體顏色調整參考具體章節

2.4保存發佈

相關問題答案