設(shè)計優(yōu)化的 Web 報表
Crystal Reports 本身的性能優(yōu)點:
按需分配頁的報表訪問允許用戶只下載需要查看的特定報表頁,從而縮短了響應(yīng)時間,減少了 Web 流量。不僅如此,占位符和部分頁技術(shù)還使您無須等待圖形和子報表等大對象的處理,就能立即查看 Web 上的報表頁和數(shù)據(jù)。
Crystal Report 引擎的多線程能力及線程安全數(shù)據(jù)庫驅(qū)動程序使您能夠在許多其他操作在后臺進(jìn)行的同時,繼續(xù)執(zhí)行您自己的重要任務(wù)。此外,報表引擎減少了數(shù)據(jù)傳遞次數(shù),通過改善的內(nèi)存管理來加快處理速度,盡可能高效處理子報表和參數(shù)。
優(yōu)化 Web 報表的關(guān)鍵策略
計劃
BusinessObjects Enterprise 包含一個靈活的基于時間和事件的調(diào)度系統(tǒng),使您可以在工余時間處理大的報表,從而避免不必要的數(shù)據(jù)庫訪問。(Report Application Server 提供按需制表功能,每個查看請求都會產(chǎn)生一個單獨的數(shù)據(jù)庫查詢)。
版本管理
版本管理和調(diào)度功能緊密配合,共同實現(xiàn)報表實例的存儲。版本管理不僅可以降低為服務(wù)用戶而造訪數(shù)據(jù)庫的次數(shù),而且可以保留報表實例的檔案作為歷史參考。
集群
BusinessObjects Enterprise 整合了成熟的集群和負(fù)載平衡技術(shù),可幫助您實現(xiàn)一個高度易用、性能可靠的信息傳送系統(tǒng)。
可伸縮性
BusinessObjects Enterprise 建立在分布式多服務(wù)器結(jié)構(gòu)的基礎(chǔ)上,可使您通過單機擴(kuò)容(添加處理器)或多機擴(kuò)展來處理較重的用戶負(fù)載。
管理
BusinessObjects Enterprise 包含大量的管理控件,可用來組織內(nèi)容,設(shè)置復(fù)雜的調(diào)度和安全性,并調(diào)節(jié)系統(tǒng)達(dá)到最佳性能。
外部(第三方)身份驗證
BusinessObjects Enterprise 允許您利用現(xiàn)有安全系統(tǒng)來管理用戶和組。所有身份驗證工作都可委托給第三方 NT 或 LDAP 系統(tǒng)。
BusinessObjects Enterprise 中日期函數(shù)的求值時間
Crystal Reports 中可用的不同日期和時間函數(shù)是在報表處理的不同階段求值的。某些函數(shù)是在處理預(yù)定的報表或刷新報表實例時求值的:該求值時間稱為“WhileReadingRecords”。其他函數(shù)是在每次格式化報表頁以在報表查看器或瀏覽器中顯示時求值的:該求值時間稱為“WhilePrintingRecords”。
如果使用 BusinessObjects Enterprise 生成報表實例,并且注意到所求出的日期或時間函數(shù)值不是預(yù)期值,請考慮以下因素:
- 當(dāng)前日期和時間始終是從報表引擎可以在本地訪問的時鐘(即處理報表的計算機上的時鐘)中讀取的。在 BusinessObjects Enterprise 中,“作業(yè)服務(wù)器”依據(jù)數(shù)據(jù)庫處理預(yù)定報表,而“頁面服務(wù)器”依據(jù)數(shù)據(jù)庫處理按需要顯示的報表。Page Server 還在用戶查看報表實例的個別頁面時對頁面進(jìn)行格式化。
- 在處理預(yù)定報表時,Job Server 將對所有日期和時間公式進(jìn)行求值,以便生成報表實例。如果只是查看生成的報表實例,則不會對任何公式重新求值。
- 當(dāng)您查看緩存的報表頁時,不會對任何日期函數(shù)重新求值,原因是記錄已被讀取并且頁面已被格式化。
- 如果在報表的選定公式中使用日期和/或時間函數(shù),則報表數(shù)據(jù)依賴于這些公式的返回值。因此,在以后某個日期查看報表實例時,函數(shù)可能會導(dǎo)致系統(tǒng)依據(jù)數(shù)據(jù)庫對報表數(shù)據(jù)進(jìn)行更新。
- 若要確保日期和時間函數(shù)返回預(yù)期的值,可以通過使用 WhileReadingRecords 和 WhilePrintingRecords 函數(shù)來強制確定求值時間。
在設(shè)計報表,尤其是設(shè)計用于 Web 的報表時,應(yīng)該允許報表用戶操縱其所查看的數(shù)據(jù)。即,顯示匯總信息,以便每個用戶可以快速地瀏覽報表,然后深化以訪問其他數(shù)據(jù)。采用此方法,由于僅從數(shù)據(jù)庫服務(wù)器傳輸用戶所請求的數(shù)據(jù),所以最大限度地降低了 Web 流量并縮短了響應(yīng)時間。
下面只是設(shè)計用戶驅(qū)動報表的幾點優(yōu)勢:
- 報表用戶可以對其在 Web 上查看的信息類型和數(shù)量進(jìn)行交互控制。
- 因為只從數(shù)據(jù)庫服務(wù)器返回用戶所請求的信息,所以數(shù)據(jù)傳輸和網(wǎng)絡(luò)流量減少。
- 當(dāng)用戶需要通過 Web 根據(jù)實時數(shù)據(jù)制作報表時,面向用戶的報表響應(yīng)迅速,并能有效地與數(shù)據(jù)庫服務(wù)器通訊。
- 報表變得更有用,原因在于每個用戶均可自定義報表的內(nèi)容,從而創(chuàng)建針對其特定決策問題的報表解決方案。
使用更快的報表格式
要提高在 Crystal Reports 舊版本中創(chuàng)建的報表的性能,最快速的方法是將其以最新的 Crystal Reports 格式保存。Crystal Reports 在經(jīng)過改進(jìn)后,已能較以往更快地處理報表:更新舊報表可利用這些改進(jìn)功能。
若要更新舊報表的格式,只需用 Crystal Reports 將其打開,然后從“文件”菜單中選擇“保存”。舊版本的報表將被替換為版本 11 的報表。
在實時數(shù)據(jù)和已保存數(shù)據(jù)之間選擇
設(shè)計匯總報表
設(shè)計和分發(fā)摘要報表是確保用戶可以在 Web 上快速查找所需數(shù)據(jù)的一種相對簡便的方法。摘要報表可以包含的數(shù)據(jù)與其他任何報表一樣多。但是,通過隱藏匯總報表的“詳細(xì)資料”節(jié),可以避免用戶陷入他們可能并不直接需要的數(shù)據(jù)中。
在 Crystal Reports 中打開報表。
如果尚未創(chuàng)建分組及匯總的報表,則從“Feature Examples”樣本文件夾中打開“Group.rpt”。
在“報表”菜單上,單擊“節(jié)專家”打開“節(jié)專家”。
在“節(jié)”列表中,單擊“詳細(xì)資料”。
在“節(jié)專家”的“公用”選項卡上,選中“隱藏(深化完成)”復(fù)選框。
單擊“確定”。
慎用子報表
利用按需分配子報表
如果報表有處理大量記錄的節(jié),則可以將該節(jié)放入按需分配子報表中。按需分配子報表在主報表中以超級鏈接的形式出現(xiàn)。在打開主報表時,不會檢索按需分配子報表的任何數(shù)據(jù),直到深化相應(yīng)的超級鏈接為止。
使用鏈接子報表
當(dāng)鏈接子報表時,Crystal Reports 會根據(jù)主報表中的匹配記錄協(xié)調(diào)子報表中的數(shù)據(jù)。
鏈接表而不是鏈接子報表
只要可能,就應(yīng)采用以下方法協(xié)調(diào)報表數(shù)據(jù):將“數(shù)據(jù)庫專家”中“鏈接”選項卡上的數(shù)據(jù)庫表鏈接到主報表,而不是將常規(guī)子報表(即非按需分配子報表)鏈接到主報表。因為每個子報表都是作為單獨的報表運行,所以鏈接的表常常有性能優(yōu)勢。
有效地使用其他設(shè)計元素
映射
映射呈現(xiàn)是一種單線程操作,它的縮放性能并不好。盡管支持映射,但您仍然需要仔細(xì)考慮報表中的映射將對性能產(chǎn)生的總體影響。
報表模板
如果將對多個報表應(yīng)用同一模板,最好將報表模板打開一次,然后將其保存在緩存中,這是因為模板只需要為只讀。
包括“第 N 頁,共 M 頁”或“總頁數(shù)”
如果在報表中包括特殊字段“第 N 頁,共 M 頁”或“總頁數(shù)”,則報表需要先完成處理,然后才能計算此值。除非報表非常小或者的確需要此值,否則,請避免使用這些特殊字段。
設(shè)計報表以最大程度地利用數(shù)據(jù)共享
BusinessObjects Enterprise 具有數(shù)據(jù)共享功能,通過減少具有多個用戶的系統(tǒng)中進(jìn)行的數(shù)據(jù)庫調(diào)用次數(shù)來提高性能。
只有在滿足某些條件時,才能在報表對象的用戶之間共享數(shù)據(jù)。在不損害用戶的報表信息需求的情況下,嘗試通過設(shè)計盡可能滿足數(shù)據(jù)共享條件的報表來最大程度地利用數(shù)據(jù)共享。
如果報表由頁面服務(wù)器處理,則在滿足以下條件時將會在報表用戶之間共享數(shù)據(jù):
- 用戶使用相同數(shù)據(jù)庫登錄信息查看報表時。
- 用戶使用相同參數(shù)查看報表時。
- 用戶使用相同頁面布局選項查看報表時。
- 用戶使用相同區(qū)域設(shè)置查看報表時。
使用 DHTML 查看器、ActiveX 查看器或 Java 查看器查看的報表是使用頁面服務(wù)器處理的。這些查看器不允許用戶更改報表的頁面布局或區(qū)域設(shè)置。但是,可以開發(fā)提供此功能的自定義查看器應(yīng)用程序。
如果報表由報表應(yīng)用程序服務(wù)器 (RAS) 處理,則在滿足以下條件時將會在報表用戶之間共享數(shù)據(jù):
- 用戶使用相同數(shù)據(jù)庫登錄信息查看報表時。
- 用戶使用相同參數(shù)查看報表時。
- 用戶使用相同區(qū)域設(shè)置查看報表時。
- 用戶不修改報表時。
使用高級 DHTML 查看器(或允許查看或修改報表的自定義應(yīng)用程序)查看的報表是使用報表應(yīng)用程序服務(wù)器處理的。
優(yōu)化您的制表環(huán)境
選擇最快的數(shù)據(jù)庫和連接
若要提高制表性能,應(yīng)充分利用數(shù)據(jù)庫進(jìn)行大部分報表處理工作。理想情況下,結(jié)構(gòu)化查詢語言 (SQL) 數(shù)據(jù)庫是執(zhí)行這類任務(wù)最有效的數(shù)據(jù)庫。
使用表索引
要使處理速度達(dá)到最快,可基于 SQL 數(shù)據(jù)庫中帶索引的字段創(chuàng)建報表。使用表索引很容易提高數(shù)據(jù)的訪問速度,減少 Crystal Reports 計算數(shù)據(jù)所花的時間。
改進(jìn)表鏈接選擇
1. 確保每個數(shù)據(jù)庫表在要使用的字段上編制了索引。
2. 將數(shù)據(jù)庫表添加到您的報表,然后在公用字段上鏈接主表和查閱表,而不要插入鏈接子報表再將其綁定到主報表的數(shù)據(jù)。
3. 在主表中,使用對索引字段設(shè)置了范圍限制的記錄選定公式。這樣可以減少 Crystal Reports 必須在查閱表中找到的與主表中記錄相匹配的記錄的數(shù)目。
使用線程安全數(shù)據(jù)庫驅(qū)動程序
使用存儲過程進(jìn)行更快的處理
使用增強的記錄選定公式
下推記錄選定
Year ({訂單.訂單日期}) < 2001 返回所有DB記錄;{訂單.訂單日期} < #Jan 1, 2001# 只返回所需記錄
記錄選定性能提示
在設(shè)置記錄選定請求時,請考慮下列與性能相關(guān)的項目:
常規(guī)
- 要下推記錄選定,必須在“報表選項”對話框(從“文件”菜單打開)中選中“為提高速度而使用索引或服務(wù)器”。
- 在記錄選定公式中,避免在非參數(shù)字段的字段上進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。
例如,避免使用 ToText( ) 將某數(shù)值數(shù)據(jù)庫字段轉(zhuǎn)換為字符串?dāng)?shù)據(jù)庫字段。
- 能夠下推一些使用常量表達(dá)式的記錄選定公式。
PC 數(shù)據(jù)庫
- 只能下推編有索引的字段上的記錄選定。
- 只能下推 AND 子句(非 OR)。
SQL 數(shù)據(jù)庫
- 能夠下推索引字段或非索引字段上的記錄選定。
- 如果使用索引字段,SQL 服務(wù)器響應(yīng)速度將加快。
- 能夠下推 AND 和 OR 子句。
- 可以下推包含某些類型的嵌入公式的記錄選定公式。
- 應(yīng)該合并 SQL 表達(dá)式字段以下推進(jìn)行記錄選定所需的公式計算。
- 在“數(shù)據(jù)庫”菜單上單擊“顯示 SQL 查詢”,以查看將要發(fā)送到數(shù)據(jù)庫服務(wù)器的 SQL。
編寫高效記錄選定公式的策略
考慮 1
任何完全用“選擇專家”生成、而不是自己編寫的記錄選定公式,都可以下推。
考慮 2
任何具有 DataBaseField SupportedOperator ConstantOrParameterExpression 形式的選定公式均可下推。
當(dāng)然,DataBaseField 只是一個數(shù)據(jù)庫字段。SupportedOperator 是 =、<>、<、<=、>、>=、StartsWith、Like 或 In 之中的任何一個。
ConstantOrParameterExpression 是涉及常量值、運算符、函數(shù)和參數(shù)字段的任何表達(dá)式。它不能包含變量、控制結(jié)構(gòu)或參數(shù)字段以外的字段。根據(jù)其本身定義,常量表達(dá)式和參數(shù)表達(dá)式可以無須訪問數(shù)據(jù)庫而求得。
注意: 常量或參數(shù)表達(dá)式的求值結(jié)果可以是簡單值、區(qū)域值、數(shù)組值或一個區(qū)域值數(shù)組。這類表達(dá)式的舉例如下:
{?number parameter} - 3
Year ({?run date})
CurrentDate + 5
DateDiff ("q", CurrentDate, CDate("Jan 1, 1996"))
Month (Maximum ({?date range parameter}) + 15)
["Canada", "Mexico", "USA", {?enter a country}]
1000 To 5000
[5000 To 10000, 20000 To 30000, 50000 To 60000]
一個完整的示例:
{訂單.訂單日期} >= CurrentDate - 3
該程序還可下推只包含布爾字段(不包含運算符和常量部分)的表達(dá)式。
{訂單.已發(fā)貨}
Not {訂單.已發(fā)貨}
考慮 3
IsNull (DataBaseField) 可以下推。
考慮 4
SqlExpression SupportedOperator ConstantOrParameterExpression 可以下推。例如,如果 {@ExtendedPrice} = (Quantity * Price)
,則選定公式 {@ExtendedPrice} > 1000
不能下推。但是,如果用等價的 SQL 表達(dá)式代替 @ExtendedPrice
,則該選定公式可以下推。
考慮 5
當(dāng)使用遵循上述考慮因素編寫的多個表達(dá)式時,將其用 AND 和 OR 分開,也可以使用 NOT。每種表達(dá)式可以有多個,并用括號確定優(yōu)先級。例如:
{Orders.Order ID} < Minimum({?number range}) Or
{訂單.訂單金額} >= 1000
(IsNull({客戶.地區(qū)}) Or
{客戶.地區(qū)} = "BC") And
{客戶.去年銷售額} > 2000
將參數(shù)字段合并到記錄選定公式中
不要在每次打開報表時均顯示報表的所有數(shù)據(jù),可以創(chuàng)建參數(shù)字段提示用戶指定希望查看的數(shù)據(jù)。為了減少從數(shù)據(jù)庫服務(wù)器傳輸?shù)臄?shù)據(jù)量,請將這些參數(shù)字段直接合并到記錄選定公式中。
一般情況下,參數(shù)字段為用戶提供交互性,用戶響應(yīng)參數(shù)提示以指定希望查看的數(shù)據(jù)。但是,通過將參數(shù)字段直接合并到記錄選定公式中,將不僅提供交互性,而且減少了數(shù)據(jù)傳輸并改善了性能。
可以通過“選擇專家”或“記錄選定公式工作室”向記錄選定公式添加參數(shù)字段。當(dāng)使用“記錄選定公式工作室”時,可將參數(shù)字段和其他任何字段一樣對待。
適時使用 SQL 表達(dá)式
為了維持最佳的報表處理速度,請避免在記錄選定公式中使用公式(不管是 Crystal 語法還是 Basic 語法)。而應(yīng)該用等效的 SQL 表達(dá)式字段替換原公式,然后將 SQL 表達(dá)式字段合并到記錄選定公式中。這樣做將大大提高您的記錄選定被下推到服務(wù)器的機會。
另外,應(yīng)避免對公式字段進(jìn)行排序、分組或總計(不管是 Crystal 語法還是 Basic 語法)。而應(yīng)該用等效的 SQL 表達(dá)式字段替換原公式字段,然后在 SQL 表達(dá)式字段上進(jìn)行排序、分組或總計。這樣做也將大大提高在服務(wù)器上執(zhí)行處理的機會。
最后,如果數(shù)據(jù)庫支持 Case 邏輯,并且報表需要摘要 If-Then-Else 公式計算,請用 SQL 表達(dá)式字段替換該公式。
改進(jìn)分組、排序和總計
在服務(wù)器上執(zhí)行分組
當(dāng)通過 Web 從活動數(shù)據(jù)中進(jìn)行實時制表時,使用選項“在服務(wù)器上執(zhí)行分組”可減少從數(shù)據(jù)庫服務(wù)器傳輸?shù)臄?shù)據(jù)量。使用此選項后,大部分?jǐn)?shù)據(jù)處理工作都卸載到數(shù)據(jù)庫服務(wù)器,并且開始時僅讀入一個數(shù)據(jù)子集。僅當(dāng)您在報表中進(jìn)行深化時才從數(shù)據(jù)庫返回詳細(xì)數(shù)據(jù)。
注意: 服務(wù)器端處理僅適用于那些基于 SQL 數(shù)據(jù)源的經(jīng)過排序和分組的報表。
啟用服務(wù)器端處理
- 在“文件”菜單中,單擊“報表選項”。
- 選擇“報表選項”對話框中的“在服務(wù)器上執(zhí)行分組”。
如果沒有選擇“為提高速度而使用索引或服務(wù)器”,則該復(fù)選框是不活動的。
提示: 當(dāng)選中“為提高速度而使用索引或服務(wù)器”后,您可以迅速從“數(shù)據(jù)庫”菜單啟用“在服務(wù)器上執(zhí)行分組”。
- 單擊“確定”。
將 SQL 表達(dá)式用于分組、排序和總計
將 SQL 表達(dá)式用于 Case 邏輯
如果數(shù)據(jù)庫支持 Case 邏輯,并且報表需要對 If-Then-Else 公式計算進(jìn)行匯總,請用 SQL 表達(dá)式字段替換該公式。在此類情況下,SQL 表達(dá)式字段使 Crystal Reports 可以在服務(wù)器上執(zhí)行報表的分組。
例如,假設(shè)您正在從支持 Case 邏輯的 MS SQL Server 7 數(shù)據(jù)庫中制作報表。您需要在報表中包含一個 If-Then-Else 計算,并且對報表中每個組的計算進(jìn)行匯總。通過使用如下形式的 SQL 表達(dá)式字段執(zhí)行計算,您就利用了數(shù)據(jù)庫的能力來處理 Case 邏輯:
CASE DatabaseTable."DatabaseField"
WHEN 'SpecifiedValue' THEN Calculation1
ELSE Calculation2
END
如果記錄的 DatabaseField 值等于 SpecifiedValue 值,則執(zhí)行 Calculation1;對于所有其他記錄則執(zhí)行 Calculation2。通過包含 SQL 表達(dá)式字段,您利用了數(shù)據(jù)庫服務(wù)器的能力來處理 Case 邏輯。甚至當(dāng)您在報表的其他地方對該 SQL 表達(dá)式字段進(jìn)行匯總時,報表的分組也將隨之在服務(wù)器上進(jìn)行。
在可能的位置插入?yún)R總和運行總計字段
可能的情況下,應(yīng)避免創(chuàng)建包含全局變量的公式來計算匯總或運行總計。
相反,應(yīng)通過單擊“插入”菜單然后選擇相應(yīng)的命令(小計、總計和匯總)來創(chuàng)建匯總。通過打開“字段資源管理器”,右擊“運行總計字段”,然后從快捷菜單中選擇“新建”來創(chuàng)建運行總計字段。
posted on 2005-12-07 22:02
魚上游 閱讀(4569)
評論(2) 編輯 收藏 所屬分類:
爪哇世界探險