本文包含了microsoft® sql server™報(bào)表服務(wù)報(bào)表設(shè)計(jì)的技巧和最佳實(shí)踐。本文提供一些基本的設(shè)計(jì)問(wèn)題和一些報(bào)表服務(wù)的功能。
關(guān)于這篇文檔
從使用數(shù)據(jù)控件,到使用什么格式,到如何分發(fā)報(bào)表,報(bào)表制作者面對(duì)著很多種選擇。microsoft® sql server™ 報(bào)表服務(wù)提供了豐富的報(bào)表設(shè)計(jì)和格式的支持,從基于紙介質(zhì)表格報(bào)表到帶有圖片和鉆取功能的交互式報(bào)表
這篇文檔包括了報(bào)表制作和設(shè)計(jì)中的指導(dǎo)、建議和技巧。本文檔的目的在于解釋一般性的問(wèn)題并對(duì)初學(xué)者提供指導(dǎo)建議。報(bào)表服務(wù)聯(lián)機(jī)叢書提供了報(bào)表的制作和設(shè)計(jì)的豐富資源,并且詳細(xì)的描述了報(bào)表的設(shè)置和可用功能及參數(shù)。
本文適用于初學(xué)者和有一些經(jīng)驗(yàn)的報(bào)表制作者。報(bào)表制作的初學(xué)者也可以從報(bào)表設(shè)計(jì)章節(jié)中得到幫助。
其他信息來(lái)源
本文不包含全部的報(bào)表服務(wù)的信息。如果希望獲取詳細(xì)的產(chǎn)品信息,請(qǐng)查看產(chǎn)品文檔和在http://www.microsoft.com/sql/reporting/ 中可用的在線資源。
產(chǎn)品版本
雖然本文基于microsoft t® sql server™ 2005報(bào)表服務(wù),報(bào)表設(shè)計(jì)的相關(guān)信息也適用于早期版本的報(bào)表服務(wù)。
簡(jiǎn)介
microsoft® sql server™ 報(bào)表服務(wù)是一種完整的報(bào)表工具。在使用報(bào)表服務(wù)中,你可以設(shè)計(jì)和發(fā)布多種樣式的報(bào)表,從簡(jiǎn)單表格到帶有圖形和交互式連接的在線自由表單。報(bào)表服務(wù)可以將報(bào)表渲染成用戶指定的多種格式,包括html、pdf、excel和圖像格式。
對(duì)于各種設(shè)置和選擇對(duì)于報(bào)表制作者在選擇報(bào)表布局是需要解決的問(wèn)題。這篇文章提供了一些指導(dǎo)方針是用戶在做選擇是更加容易并解答了一些常見的問(wèn)題。
制作工具和rdl
報(bào)表服務(wù)提供了多種制作報(bào)表的方法。sql server 和microsoft® visual studio® 2005 都包括了圖形化的報(bào)表設(shè)計(jì)工具。sql server 2005報(bào)表服務(wù)提供了report builder工具幫助業(yè)務(wù)人員設(shè)計(jì)報(bào)表。也有其他的開發(fā)工具可以創(chuàng)建報(bào)表服務(wù)的報(bào)表格式。
無(wú)論我們使用哪一種制作環(huán)境,所有的報(bào)表定義都是用報(bào)表定義語(yǔ)言(rdl)格式存儲(chǔ),rdl是一種公開的xml定義報(bào)表的格式。這樣可以直接編寫rdl或者創(chuàng)建自定義工具生成相應(yīng)格式。報(bào)表制作者可以使用圖形化的制作工具編輯已存在的rdl文件。
在樣例中展示特殊的技術(shù)時(shí),文章提取了實(shí)現(xiàn)該功能的部分rdl。
在報(bào)表服務(wù)的網(wǎng)站上http://www.microsoft.com/sql/reporting/可以獲取完整的rdl規(guī)范。
報(bào)表設(shè)計(jì)概念
本節(jié)描述了影響報(bào)表設(shè)計(jì)和布局的關(guān)鍵因素。如果你是剛剛接觸報(bào)表服務(wù),這里的內(nèi)容會(huì)對(duì)你有幫助。所有的這些話題在sql server 聯(lián)機(jī)叢書中都有詳盡的描述。
在設(shè)計(jì)報(bào)表服務(wù)中的報(bào)表時(shí),你定義了數(shù)據(jù)并制定在頁(yè)面上的排列。盡管這個(gè)過(guò)程聽起來(lái)很基礎(chǔ),報(bào)表服務(wù)還是提供了下列特性:
◆支持4種不同的數(shù)據(jù)區(qū)域:列表,表格,矩陣和圖表。
◆提供了例如文本框,圖片,連接,矩形和子報(bào)表等一些列控件。
◆用戶可以通過(guò)參數(shù),條件過(guò)濾,用戶端排序,鉆取和文檔結(jié)構(gòu)圖來(lái)實(shí)現(xiàn)交互功能。
◆報(bào)表可以被渲染成各種格式,包括html,excel,pdf,圖像,xml和逗號(hào)分隔符 (csv) 。
你做的關(guān)于每一個(gè)關(guān)鍵區(qū)域的決策都會(huì)影響最重的顯示效果和報(bào)表功能。接下來(lái)的章節(jié)將提供影響設(shè)計(jì)和布局效果的因素。
數(shù)據(jù)區(qū)域
在我們的報(bào)表中我們第一個(gè)選擇就是選擇數(shù)據(jù)區(qū)域類型。報(bào)表服務(wù)提供了下列數(shù)據(jù)區(qū)域類型:
◆表格
表格通過(guò)一行接一行的方式表現(xiàn)數(shù)據(jù)。列是固定的你無(wú)法擴(kuò)展,但是行可以向下展開。因此,當(dāng)表格增長(zhǎng)時(shí),它將數(shù)據(jù)向下展開。你也可以在表格內(nèi)將數(shù)據(jù)分組。
◆矩陣
a矩陣或者叫交叉表類似于表格,但是行和列都是可以擴(kuò)展并填充數(shù)據(jù)的。矩陣可以向外和向下增加其他報(bào)表對(duì)象。你可以在矩陣中在行和列中嵌套分組。
◆列表
列表適用于創(chuàng)建表單的自由表單數(shù)據(jù)區(qū)域。你可以通過(guò)嵌套列表來(lái)分組數(shù)據(jù)。
◆圖表
圖表是數(shù)據(jù)的圖形表達(dá)方式。報(bào)表服務(wù)提供了多種圖表的格式。
你選擇的數(shù)據(jù)區(qū)域可能依賴于你使用的數(shù)據(jù)類型、你希望報(bào)表的外觀和如何展現(xiàn)報(bào)表。例如,要以microsoft® excel®形式呈遞的報(bào)表使用表格比使用列表更適合。
報(bào)表項(xiàng)的位置和尺寸
報(bào)表有3個(gè)主要的區(qū)域組成:頁(yè)眉,頁(yè)腳和正文。報(bào)表服務(wù)支持將報(bào)表中任意放置報(bào)表項(xiàng)。數(shù)據(jù)區(qū)域可以和其它區(qū)域并行或通過(guò)分組來(lái)嵌套。
當(dāng)設(shè)計(jì)報(bào)表時(shí),理解當(dāng)報(bào)表項(xiàng)增長(zhǎng)時(shí)如何處理是非常重要的。報(bào)表項(xiàng)可以水平或垂直的增長(zhǎng),依賴于重復(fù)的片斷,內(nèi)容的尺寸和諸如字體等報(bào)表渲染的因素。
當(dāng)報(bào)表項(xiàng)增長(zhǎng)時(shí),例如一個(gè)表格,它會(huì)生成很多相關(guān)的報(bào)表項(xiàng)。這些報(bào)表項(xiàng)會(huì)在同一個(gè)父容器中。有如下2種方法來(lái)控制報(bào)表項(xiàng)的移動(dòng):
◆每個(gè)報(bào)表項(xiàng)為了維護(hù)與上邊報(bào)表項(xiàng)間的最小距離會(huì)向下移動(dòng)。
◆每個(gè)報(bào)表項(xiàng)為了維護(hù)與左側(cè)報(bào)表項(xiàng)間的最小距離會(huì)向右移動(dòng)。
如果一個(gè)報(bào)表項(xiàng)增長(zhǎng),它會(huì)擴(kuò)展包含它的容器的邊界,容器會(huì)適應(yīng)所包容的報(bào)表項(xiàng)變化尺寸。
如果報(bào)表項(xiàng)和其他的報(bào)表項(xiàng)重疊,報(bào)表定義中的zindex元素決定哪個(gè)元素在頂層。zindex值高的報(bào)表項(xiàng)會(huì)置于上層。
這些是一些你可以用來(lái)控制報(bào)表項(xiàng)的增長(zhǎng)和移動(dòng)方法的技術(shù)。如果需要使用矩形和報(bào)表項(xiàng)的分組的信息,請(qǐng)參考本文后面“實(shí)用的報(bào)表設(shè)計(jì)技巧”部分。
分頁(yè)
對(duì)于場(chǎng)報(bào)表來(lái)說(shuō)關(guān)鍵問(wèn)題在于如何控制頁(yè)面的分割。頁(yè)面通過(guò)2個(gè)因素控制分割:
◆頁(yè)面尺寸
◆用戶指定對(duì)象前后頁(yè)面分割
頁(yè)面尺寸
為了控制頁(yè)面的尺寸,可以通過(guò)下列指導(dǎo)設(shè)置頁(yè)面的高度和寬度屬性:
◆可以通過(guò)報(bào)表的pageheight和pagewidth屬性設(shè)置渲染后的物理頁(yè)面格式。
◆例如html這樣的交互式渲染格式不能渲染物理頁(yè)面分割。而使用 interactiveheight 和 interactivewidth 屬性創(chuàng)建邏輯的頁(yè)面分割。
◆有一些渲染格式,例如excel,不支持頁(yè)面尺寸。對(duì)于這些報(bào)表,你將不得不使用頁(yè)面分割符將報(bào)表分割成多個(gè)頁(yè)面。
注意,如果報(bào)表的自身寬度比頁(yè)面寬度大,報(bào)表將在水平方向上交叉于多個(gè)頁(yè)面。
頁(yè)面分割
你可以在矩形,表格,矩陣,列表,圖表和分組中的開始或結(jié)尾處添加分頁(yè)符。報(bào)表服務(wù)會(huì)嘗試將所有報(bào)表項(xiàng)和數(shù)據(jù)分組保持在同一個(gè)頁(yè)面上。
可以使用報(bào)表項(xiàng)中的pagebreakatend和pagebreakatstart屬性指定在報(bào)表項(xiàng)之前或之后插入分頁(yè)符。
子報(bào)表
子報(bào)表是在報(bào)表項(xiàng)中指向另外一個(gè)報(bào)表。任何報(bào)表可以被用于一個(gè)子報(bào)表,并且你可以設(shè)置父報(bào)表將要傳遞到子報(bào)表的參數(shù)。
但是用子報(bào)表時(shí)你要注意下列前提:
◆子報(bào)表無(wú)法和父報(bào)表共享數(shù)據(jù)。報(bào)表服務(wù)器為分割的報(bào)表處理每一個(gè)子報(bào)表實(shí)例,但是這會(huì)影響性能?!?/p>
◆子報(bào)表的頁(yè)眉和頁(yè)腳會(huì)被忽略。
子報(bào)表在下列環(huán)境中十分有用:
◆當(dāng)你需要在一個(gè)數(shù)據(jù)區(qū)域中從不同數(shù)據(jù)源嵌套分組。
◆當(dāng)報(bào)表有多個(gè)一對(duì)多關(guān)系的部分。
◆當(dāng)你需要在多個(gè)父報(bào)表中重用子報(bào)表。
◆當(dāng)你需要在其他報(bào)表內(nèi)部嵌入一個(gè)標(biāo)準(zhǔn)的,獨(dú)立的報(bào)表。
如果報(bào)表共享數(shù)據(jù),類似表格,矩陣,列表和圖表這樣的數(shù)據(jù)區(qū)域提供了與子報(bào)表同樣的功能。然而,它們提供更好的性能。數(shù)據(jù)區(qū)域在并行的布局中提供了比子報(bào)表更好的工作方式。
表達(dá)式和函數(shù)
報(bào)表制作者可以在報(bào)表中使用表達(dá)式數(shù)據(jù)的外觀,更改報(bào)表項(xiàng)的屬性或控制數(shù)據(jù)的獲取。本文的技巧章節(jié)提供了一些使用表達(dá)式的設(shè)計(jì)樣例。
你可以在表達(dá)式中使用microsoft® visual basic®函數(shù)。在表1中顯示了一些常用的函數(shù)。
表1
| visual basic 函數(shù) | 結(jié)果 | 
| today() | 返回當(dāng)前日期。 | 
| dateadd() | 基于單一參數(shù)提供一段日期。 | 
| year() | 顯示指定日期中的年份。使用它分組日期或做為一系列日期的標(biāo)簽。 | 
| month() | 顯示日期中的月份 | 
| format() | 格式化字符串??梢杂糜诟袷交掌鸷蛿?shù)字。 | 
| right(), left(), and instr() | 返回截取后字符串中的一部分。 | 
| iif | 依照評(píng)估的表達(dá)式,返回2個(gè)值中的1個(gè)。為了返回3個(gè)值中的1個(gè),你可以嵌套iif函數(shù)。 | 
你可以通過(guò)引用適當(dāng)?shù)难b配件在表達(dá)式中使用.net函數(shù)。你也可以使用自定義的裝配件。如果需要此方面更詳細(xì)的信息,請(qǐng)查看報(bào)表服務(wù)聯(lián)機(jī)叢書中”using customer assemblies with reports”部分。
聚合函數(shù)和范圍
報(bào)表服務(wù)提供了許多聚合函數(shù)可以在報(bào)表中創(chuàng)建總和或其他聚合。
每個(gè)匯總函數(shù)支持一個(gè)定義匯總范圍的范圍參數(shù)。范圍可以通過(guò)分組名稱,數(shù)據(jù)集或數(shù)據(jù)區(qū)域來(lái)指定。數(shù)據(jù)區(qū)域或分組必須直接或間接包含聚合函數(shù)指定的報(bào)表項(xiàng)。
如果你忽略了范圍,聚合范圍是報(bào)表項(xiàng)所在的分組或數(shù)據(jù)區(qū)域中最里面的分組。
表2中顯示了報(bào)表服務(wù)支持的聚合函數(shù):
表2
| 函數(shù) | 描述 | 
| avg | 從指定表達(dá)式中返回所有非空值的平均值。 | 
| count | 返回指定表達(dá)式中值的數(shù)量。 | 
| countdistinct | 返回指定表達(dá)式中所有不同值的數(shù)量。 | 
| countrows | 返回指定范圍中行的數(shù)量。 | 
| first | 從指定表達(dá)式中返回第一個(gè)值。 | 
| last | 從指定表達(dá)式中返回最后一個(gè)值。 | 
| max | 從指定表達(dá)式中返回所有非空值中的最大值。 | 
| min | 從指定表達(dá)式中返回所有非空值中的最小值。 | 
| stdev | 從指定表達(dá)式中返回所有非空值中的標(biāo)準(zhǔn)差。 | 
| stdevp | 從指定表達(dá)式中返回所有非空值中的總體標(biāo)準(zhǔn)差。 | 
| sum | 從指定表達(dá)式中返回所值的總和。 | 
| var | 從指定表達(dá)式中返回所有非空值中的方差。 | 
| varp | 從指定表達(dá)式中返回所有非空值中的總體方差。 | 
報(bào)表服務(wù)提供函數(shù)來(lái)支持運(yùn)行時(shí)的匯總。圖3中顯示了相關(guān)的函數(shù)。
表 3
| 函數(shù) | 功能 | 
| rownumber | 在指定范圍內(nèi)返回運(yùn)行時(shí)產(chǎn)生所有行的數(shù)量。當(dāng)于數(shù)據(jù)區(qū)域中使用文本框時(shí),顯示在表達(dá)式顯示部分每個(gè)文本框?qū)嵗男袛?shù)。用于指定表格行數(shù)或提供分頁(yè)符。在rownumber(nothing)中,關(guān)鍵字nothing指定了在最外側(cè)數(shù)據(jù)區(qū)域中從第一行開始計(jì)數(shù)。 | 
| runningvalue | 使用指定函數(shù)從指定表達(dá)式中返回運(yùn)行時(shí)的聚合。 | 
報(bào)表服務(wù)提供了下列導(dǎo)航范圍函數(shù)。表4中顯示了這些函數(shù)。
表4
| 函數(shù) | 描述 | 
| inscope | 判斷當(dāng)前報(bào)表項(xiàng)實(shí)例是否在指定的范圍中。它使用數(shù)據(jù)集,分組或數(shù)據(jù)區(qū)域的名稱做為參數(shù)并返回布爾值。 | 
| level | 在遞歸層次中返回當(dāng)前級(jí)別的深度。 | 
| previous | 返回之前的行。 | 
報(bào)表渲染時(shí)的考慮
報(bào)表服務(wù)器提供了一套磨人的渲染擴(kuò)展。你可以從報(bào)表服務(wù)中刪除擴(kuò)展或添加自定義擴(kuò)展支持新的渲染格式。
默認(rèn)的渲染擴(kuò)展包括了html,excel,逗號(hào)分隔符(csv),xml,圖像和pdf。
注意: 默認(rèn)渲染擴(kuò)展在報(bào)表服務(wù)中可以用于渲染報(bào)表。使用sql server 2005報(bào)表查看器控件在本地生成的報(bào)表可以支持html報(bào)表渲染,但是不需要訪問(wèn)其他的擴(kuò)展。
你選擇的渲染擴(kuò)展會(huì)影響報(bào)表的布局。例如,不是所有的渲染擴(kuò)展支持強(qiáng)制的頁(yè)面分隔符或者頁(yè)面分隔符應(yīng)用于頁(yè)面尺寸設(shè)置。表5中匯總一些差異。
表5
| 渲染擴(kuò)展 | 基于報(bào)表項(xiàng)或分組分頁(yè) | 頁(yè)面尺寸 | 
| html | 可以 | 使用interactiveheight屬性 | 
| excel | 可以 | 不可以 | 
| csv | 不可以 | 不可以 | 
| xml | 不可以 | 不可以 | 
| image | 可以 | 可以 | 
| 可以 | 可以 | |
| gdi (window 表單) | 可以 | 使用interactiveheight屬性 | 
如果你在設(shè)計(jì)報(bào)表之前你知道報(bào)表會(huì)被如何渲染,你可以針對(duì)目標(biāo)格式優(yōu)化報(bào)表布局。否則,以應(yīng)該對(duì)各種可能的渲染擴(kuò)展測(cè)試你的報(bào)表并找到和解決各式上的問(wèn)題或異常。
接下來(lái)的部分包含了使用excel,圖像,pdf和html渲染擴(kuò)展的一些建議。
excel
報(bào)表服務(wù)支持將報(bào)表渲染為microsoft® excel® 1997及以后版本。如果你計(jì)劃將報(bào)表渲染為excel,你應(yīng)該知道一些excel渲染擴(kuò)展的特殊屬性。例如:
◆在報(bào)表中每一個(gè)報(bào)表頁(yè)面將變?yōu)橐粋€(gè)excel的工作表。excel不支持頁(yè)高和頁(yè)寬的概念,所以只有顯式定義的分頁(yè)符才能將頁(yè)面分割。
◆報(bào)表服務(wù)不支持指定工作表名稱。
◆渲染擴(kuò)展構(gòu)建報(bào)表外的表格結(jié)構(gòu)。
◆不支持個(gè)別單元中的背景圖片。
◆excel除列表外的嵌套容器。
◆圖表被渲染成圖片,而不是excel中的圖表。
◆矩形被渲染成單元格組。如果舉行包含其他報(bào)表項(xiàng),矩形將變?yōu)閱卧駞^(qū)域,矩形的邊框和背景色將應(yīng)用于表格區(qū)域。
◆子報(bào)表將被作為矩形在同父報(bào)表中的工作表中渲染。
在指定excel報(bào)表中使用表格代替列表
表格使用固定的列寬。這很好的滿足excel報(bào)表中的表格格式。當(dāng)渲染為excel時(shí),報(bào)表中的報(bào)表項(xiàng)會(huì)像我們期望一樣排列。
與表格相比,列表是一種自由表單的風(fēng)格。列表中的報(bào)表項(xiàng)將被放置在工作表中像對(duì)于在報(bào)表中的位置。這樣會(huì)導(dǎo)致意想不到的結(jié)果。如果你的報(bào)表中使用了列表,要確認(rèn)渲染成excel的結(jié)果是可以接受的。
即使使用表格,如果在你的報(bào)表中頁(yè)眉跨越多個(gè)列,excel渲染擴(kuò)展可能合并單元格或引入新的列。這樣會(huì)在excel電子表格中影響數(shù)據(jù)的排序和操作。如果你計(jì)劃將報(bào)表渲染為excel,請(qǐng)?jiān)O(shè)法確認(rèn)報(bào)表項(xiàng)排列能將單元格合并減到最小。
長(zhǎng)報(bào)表的最大頁(yè)數(shù)
為了預(yù)防生成excel產(chǎn)生錯(cuò)誤,你應(yīng)該注意冗長(zhǎng)報(bào)表的頁(yè)數(shù)。報(bào)表中的每頁(yè)都會(huì)變成excel中的一個(gè)工作表。然而,每一個(gè)工作簿中為了限制對(duì)內(nèi)存的使用,會(huì)有一個(gè)最大的工作表數(shù)量。如果報(bào)表頁(yè)面超過(guò)了這個(gè)限制,excel會(huì)生成一個(gè)錯(cuò)誤。
渲染為excel時(shí)的顏色差異
支持一套預(yù)定義的顏色。當(dāng)你渲染報(bào)表時(shí),excel渲染擴(kuò)展將報(bào)表中的顏色應(yīng)設(shè)成excel支持顏色中最接近的顏色。
圖像
圖像渲染擴(kuò)展可以將報(bào)表渲染成位圖或圖元文件。默認(rèn)情況下,它將數(shù)據(jù)渲染成tiff格式。然而他也可以生成被gdi+支持的任何格式,包括bmp,emf,gif,jpeg和png。
在報(bào)表服務(wù)器中圖像渲染處理在一個(gè)虛擬的頁(yè)面中進(jìn)行,并在這個(gè)頁(yè)面創(chuàng)建圖像。結(jié)果,在任何客戶端上,基于圖像的報(bào)表在字體和布局上看起來(lái)都是一樣的。
當(dāng)你使用tiff文件時(shí),你可以查看多頁(yè)面報(bào)表。然而,其他的圖像格式為將為每一個(gè)報(bào)表頁(yè)面生成一個(gè)圖像文件。
圖像渲染也支持頁(yè)面高度,頁(yè)面寬度和頁(yè)邊距。任何報(bào)表中包含的頁(yè)眉和頁(yè)腳都會(huì)在報(bào)表邊界內(nèi)被渲染。
使用圖像渲染為所有的客戶端創(chuàng)建同樣的報(bào)表
如果你希望在所有客戶端看到同樣的報(bào)表,你應(yīng)該使用圖像渲染。特別是當(dāng)報(bào)表渲染時(shí),html報(bào)表使用客戶端子體和瀏覽器設(shè)置。這意味著當(dāng)客戶端使用不同的瀏覽器時(shí)報(bào)表的布局會(huì)有所不同。因?yàn)閳D像文件在報(bào)表服務(wù)器上格式化,它們渲染成的圖片在任何客戶端上的顯示都是一樣的。
在報(bào)表服務(wù)器上安裝適當(dāng)?shù)淖煮w
你應(yīng)該確認(rèn)在報(bào)表服務(wù)器上安裝的正確的字體。這是因?yàn)閳?bào)表實(shí)際上是在報(bào)表服務(wù)器上渲染,它使用了在報(bào)表服務(wù)器上所安裝的字體。
便攜文檔格式
便攜文檔格式(pdf)渲染擴(kuò)展創(chuàng)建的報(bào)表可以使用adobe acrobat readers打開查看。在很多方面上,pdf擴(kuò)展類似于圖片擴(kuò)展,除了下列重要的差異:
◆在pdf報(bào)表中字體沒(méi)有被嵌入到報(bào)表中?!?/p>
◆文檔結(jié)構(gòu)圖被渲染成pdf書簽。
◆你可以在設(shè)備選項(xiàng)中指定頁(yè)面的寬度高度、邊距和pdf的分辨率。
◆渲染擴(kuò)展創(chuàng)建的pdf1.3版本的文件和adobe acrobat 4.0機(jī)器以后版本兼容。
◆pdf渲染擴(kuò)展不支持 repeatwith屬性。
在客戶機(jī)中安裝適當(dāng)?shù)淖煮w
pdf擴(kuò)展無(wú)法在報(bào)表中嵌入字體。為了正確的查看報(bào)表的字體,你不僅需要在報(bào)表服務(wù)器上確認(rèn)安裝該字體,也要確認(rèn)該字體在查看報(bào)表的客戶端中正確安裝了。另外字體替代現(xiàn)象很有可能發(fā)生。
html
html擴(kuò)展可以生成與microsoft® internet explorer,mozilla firefox及apple safari兼容的html 4.0頁(yè)面。
html渲染和其他的渲染有以下的不同:
◆html渲染擴(kuò)展在html中生成了一個(gè)包含所有報(bào)表控件項(xiàng)的表格??丶?xiàng)將保持在報(bào)表布局時(shí)的位置。
◆位置和大小使用毫米(mm)為單位表示。渲染的最小單位是0.2毫米。
◆html不支持對(duì)象的重疊。這樣導(dǎo)致當(dāng)報(bào)表顯示時(shí)布局被改變了。
◆在html報(bào)表中,子報(bào)表被渲染在div標(biāo)簽中。
客戶端變化
當(dāng)在客戶端顯示時(shí),html報(bào)表使用瀏覽器的特性來(lái)設(shè)置。另外字體的變化,其他的瀏覽器設(shè)置可以做相應(yīng)的處理改變。如果你想恰到好處的控制在所有客戶端上的布局,考慮使用圖像渲染擴(kuò)展。
不同瀏覽器的差異
sql server 2005報(bào)表服務(wù)包括了對(duì)于不同瀏覽器的支持例如microsoft internet explorer, mozilla firefox 和apple safari。盡管大多數(shù)的報(bào)表的特性在這些瀏覽器上都是被支持的,你也應(yīng)該在相應(yīng)瀏覽器上測(cè)試確認(rèn)其滿足你的需求。
實(shí)用的報(bào)表設(shè)計(jì)技巧
本節(jié)提供了使用表達(dá)式來(lái)巧妙處理報(bào)表格式和布局的技巧和技術(shù)?!?/p>
使用矩形保持對(duì)象的緊湊
在報(bào)表服務(wù)中矩形可以被用于圖形元素或者對(duì)象的容器。做為對(duì)象容器,它可以是在一個(gè)頁(yè)面上的對(duì)象保持適當(dāng)?shù)木嚯x并控制對(duì)象項(xiàng)目移動(dòng)式的位置。
為了保持多個(gè)對(duì)象在同一個(gè)頁(yè)面中,可以將對(duì)象放在一個(gè)矩形內(nèi)。你通過(guò)設(shè)置矩形的pagebreakatstart或pagebreakatend屬性在矩形的前后添加分頁(yè)符。
使用矩形控制報(bào)表項(xiàng)的增加位置移動(dòng)
在同一個(gè)矩形中的控件相互間是同等的并且當(dāng)控件增長(zhǎng)或移動(dòng)時(shí)通過(guò)統(tǒng)一的規(guī)則在頁(yè)面中排布。例如:
◆報(bào)表項(xiàng)通過(guò)通過(guò)各自的矩形來(lái)推動(dòng)和置換。
◆報(bào)表項(xiàng)不能和矩形外報(bào)表項(xiàng)推動(dòng)或置換,因?yàn)樗麄儾辉谝粋€(gè)級(jí)別上。
◆如果需要,矩形可以增長(zhǎng)來(lái)適應(yīng)所包含的控件。
當(dāng)處理會(huì)擴(kuò)展的對(duì)象時(shí),你可以利用這個(gè)邏輯的功能。例如:
◆如果你為你的報(bào)表擴(kuò)展預(yù)留出一些空白的空間,可以將表格和相應(yīng)的空白空間放止于同一個(gè)矩形。當(dāng)表格增長(zhǎng),它會(huì)被置于預(yù)留好的空白空間中。
◆如果你防止矩陣擴(kuò)展出頁(yè)面的右側(cè)邊緣,可以將矩陣和一些空白放入同一個(gè)矩形中。
避免空白頁(yè)
有時(shí)當(dāng)你將報(bào)表輸出到例如pdf或打印機(jī)這樣的物理頁(yè)面是,你可能會(huì)看到有空白頁(yè)面。通常,當(dāng)報(bào)表正文超過(guò)紙面尺寸是會(huì)發(fā)生這種情況。
為了確認(rèn)所有的內(nèi)容適合于單一的紙張,正文加上頁(yè)邊的空白應(yīng)該小于預(yù)定義好的紙面寬度。文本框和其他的報(bào)表項(xiàng)可以導(dǎo)致正文寬度超過(guò)紙面寬度,即使當(dāng)超出部分的內(nèi)容不可見。另外,報(bào)表項(xiàng)水平的增長(zhǎng)(矩陣數(shù)據(jù)區(qū)域和圖片自動(dòng)設(shè)置為autosize或fit)可以導(dǎo)致正文寬度的增長(zhǎng)。
使用分頁(yè)提高大報(bào)表的性能
如果不去為一個(gè)返回大量數(shù)據(jù)的報(bào)表設(shè)置頁(yè)面大小或分頁(yè)符,一些報(bào)表格式將會(huì)嘗試將報(bào)表渲染成單頁(yè)。
例如,excel沒(méi)有默認(rèn)的固定頁(yè)面寬度。所以,如果你有一個(gè)很大的報(bào)表,excel將嘗試將其渲染成一個(gè)工作表。通常,使用分頁(yè)符可提高用戶訪問(wèn)報(bào)表時(shí)的性能,因?yàn)楫?dāng)渲染報(bào)表剩余部分時(shí),用戶可以查看報(bào)表的第一頁(yè)。
使用篩選器代替查詢參數(shù)
報(bào)表服務(wù)有幾種方法動(dòng)態(tài)的過(guò)濾報(bào)表內(nèi)容:
◆當(dāng)返回叢數(shù)據(jù)源獲取數(shù)據(jù)時(shí)使用查詢參數(shù)過(guò)濾數(shù)據(jù)。
◆應(yīng)用于數(shù)據(jù)集或報(bào)表區(qū)域的報(bào)表篩選器,限制在報(bào)表中顯示的數(shù)據(jù)。
使用篩選器獲取所有的數(shù)據(jù),但是只有和用戶相關(guān)的數(shù)據(jù)被顯示。這也許比在數(shù)據(jù)源中過(guò)濾數(shù)據(jù)的效率要低。然而,這樣可以使我們只獲取一次數(shù)據(jù)并將數(shù)據(jù)存儲(chǔ)在快照中來(lái)服務(wù)于不同的用戶請(qǐng)求。換句話說(shuō),當(dāng)我們使用查詢參數(shù),每一個(gè)新的參數(shù)查詢你都要訪問(wèn)數(shù)據(jù)源。篩選器可以使我們執(zhí)行快照并獲取所有參數(shù)的結(jié)果。
在表格中添加輪換條
也許你需要?jiǎng)?chuàng)建帶有隔行漸變形式的表格或矩陣的報(bào)表。 這種欄從視覺上可以更好地在一個(gè)頁(yè)面上跟蹤不同的行。
為了更好的模擬用在生成大量報(bào)表的高速數(shù)據(jù)打印機(jī)中的老式綠條紙 你可以輪換條設(shè)置為綠色。
為了完成這個(gè)效果,可以使用iif函數(shù)基于行數(shù)的奇偶性有條件指派背景色。例如:
=iif(rownumber(nothing) mod 2,"palegreen","white")在rdl文件中的描述應(yīng)該類似于如下代碼:
<tablecell>
<reportitems>
<textbox name="salesorderid">
<style>
<paddingleft>2pt</paddingleft>
<format>d</format>
<backgroundcolor>=iif(rownumber(nothing) mod 2,"#c0ffc0","white")
</backgroundcolor>
<textalign>right</textalign>
<paddingbottom>2pt</paddingbottom>
<paddingtop>2pt</paddingtop>
<paddingright>2pt</paddingright>
</style>
<zindex>4</zindex>
<rd:defaultname>salesorderid</rd:defaultname>
<cangrow>true</cangrow>
<value>=fields!salesorderid.value</value>
</textbox>
</reportitems>
</tablecell>在一個(gè)報(bào)表中的表格中在指定行后添加分頁(yè)符
你可以使用ceiling 函數(shù)在表格中將行分組,并在每個(gè)分組后插入分頁(yè)符。
ceiling函數(shù)返回不小于輸入?yún)?shù)的最小值。例如,每隔30行添加一個(gè)分頁(yè)符,你應(yīng)該使用下列表達(dá)式分組:
=ceiling(rownumber(nothing)/30)在rdl中描述分組應(yīng)該類似于下列描述:
<tablegroups>   
<tablegroup>
<grouping name="pagegroup">
<groupexpressions>
<groupexpression>=ceiling(rownumber(nothing)/30)</groupexpression>
</groupexpressions>
<pagebreakatend>true</pagebreakatend>
</grouping>
</tablegroup>
</tablegroups>在頁(yè)眉和頁(yè)腳中添加全局變量值
在表6中顯示了globals對(duì)象的成員,這些可以在報(bào)表的表達(dá)式中使用。
表6
| 名稱 | 類型 | 描述 | 
| pagenumber | integer | 當(dāng)前頁(yè)數(shù)。僅在報(bào)表的頁(yè)眉和頁(yè)腳中使用。 | 
| totalpages | integer | 報(bào)表的總頁(yè)數(shù)。僅在報(bào)表的頁(yè)眉和頁(yè)腳中使用。 | 
| executiontime | datetime | 報(bào)表開始執(zhí)行得日期和時(shí)間。 | 
| reportfolder | string | 包含報(bào)表的文件夾的路徑,例如salesreportsudgeting 或c:salesudget | 
| reportname | string | 報(bào)表的名稱,例如 currentbudget. | 
你可以在報(bào)表的頁(yè)眉或頁(yè)腳中使用表達(dá)式顯示報(bào)表名稱和執(zhí)行時(shí)間。時(shí)間通過(guò).net提供的短日期格式。例如:
=globals.reportname & ", dated " & format(globals.executiontime, "d")同樣也可以利用文本框?qū)?bào)表的當(dāng)前頁(yè)數(shù)和總頁(yè)數(shù)顯示在頁(yè)眉:
=globals.pagenumber & " of " & globals.totalpages在頁(yè)眉中顯示報(bào)表項(xiàng)
在長(zhǎng)報(bào)表中你可能會(huì)希望在頁(yè)眉中添加報(bào)表正文中的文字。例如,一個(gè)姓名地址錄在頁(yè)眉重要顯示當(dāng)頁(yè)中出現(xiàn)的第一個(gè)和最后一個(gè)名字。
為了實(shí)現(xiàn)這個(gè)功能,你可以在頁(yè)眉上添加一個(gè)文本框,并使用first函數(shù)。為了在頁(yè)面上顯示第一次出現(xiàn)的lastname值,表達(dá)式應(yīng)該類似于如下所示:
=first (reportitems!lastname.value)同樣的,使用表達(dá)式函數(shù)last 可以提供在頁(yè)面上顯示lastname 文本框的最后一個(gè)值 。例如
=last (reportitems!lastname.value)創(chuàng)建帶有條件格式的鉆取連接
報(bào)表服務(wù)可以通過(guò)擁護(hù)和報(bào)表的交互在報(bào)表中隱藏或顯示報(bào)表項(xiàng)。
你可以使用這種功能在報(bào)表中創(chuàng)建鉆取連接。例如,通過(guò)點(diǎn)擊某個(gè)區(qū)域,用戶可以從匯總視圖中鉆取數(shù)據(jù)的詳細(xì)信息。
接下來(lái),為包含該分組的文本框創(chuàng)建觸發(fā)開關(guān)項(xiàng)。然后當(dāng)用戶點(diǎn)擊該文本框,隱含的數(shù)據(jù)變成可見的或數(shù)據(jù)不顯示。
結(jié)論
microsoft sql server 2005 報(bào)表服務(wù)提供了多種報(bào)表設(shè)計(jì)的選擇。本文提供了一些常規(guī)的指導(dǎo)方針和報(bào)表設(shè)計(jì)技巧,但是只涉及了部分該產(chǎn)品的功能。為了獲取更多的設(shè)計(jì)信息和產(chǎn)品功能,請(qǐng)參考sql server 2005 聯(lián)機(jī)叢書。
新聞熱點(diǎn)
疑難解答
圖片精選