浅学rdl报表
淺學(xué)rdl報(bào)表 2007-12-21 11:28
http://yan.sunny86.blog.163.com/blog/static/421871372007112111284452/
分類(lèi):編程 字號(hào): 大? 中? 小小應(yīng)用于:Microsoft? SQL Server? 2005 報(bào)表服務(wù)
目錄
關(guān)于這篇文檔?
其他信息來(lái)源?
產(chǎn)品版本?
簡(jiǎn)介?
制作工具和RDL
報(bào)表設(shè)計(jì)概念?
數(shù)據(jù)區(qū)域?
報(bào)表項(xiàng)的位置和尺寸?
分頁(yè)?
子報(bào)表?
表達(dá)式和函數(shù)?
聚合函數(shù)和范圍?
報(bào)表渲染時(shí)的考慮?
Excel?
圖像?
便攜文檔格式?
HTML?
實(shí)用的報(bào)表設(shè)計(jì)技巧?
使用矩形保持對(duì)象的緊湊?
避免空白頁(yè)?
使用分頁(yè)提高大報(bào)表的性能?
使用篩選器代替查詢(xún)參數(shù)?
在表格中添加輪換條?
在一個(gè)報(bào)表中的表格中在指定行后添加分頁(yè)符?
在頁(yè)眉和頁(yè)腳中添加全局變量值?
在頁(yè)眉中顯示報(bào)表項(xiàng)?
創(chuàng)建帶有條件格式的鉆取連接?
結(jié)論?
關(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ī)叢書(shū)提供了報(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)表渲染成用戶(hù)指定的多種格式,包括HTML、PDF、Excel和圖像格式。
對(duì)于各種設(shè)置和選擇對(duì)于報(bào)表制作者在選擇報(bào)表布局是需要解決的問(wèn)題。這篇文章提供了一些指導(dǎo)方針是用戶(hù)在做選擇是更加容易并解答了一些常見(jiàn)的問(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)表。也有其他的開(kāi)發(fā)工具可以創(chuàng)建報(bào)表服務(wù)的報(bào)表格式。
無(wú)論我們使用哪一種制作環(huán)境,所有的報(bào)表定義都是用報(bào)表定義語(yǔ)言(RDL)格式存儲(chǔ),RDL是一種公開(kāi)的XML定義報(bào)表的格式。這樣可以直接編寫(xiě)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ū)中都有詳盡的描述。
在設(shè)計(jì)報(bào)表服務(wù)中的報(bào)表時(shí),你定義了數(shù)據(jù)并制定在頁(yè)面上的排列。盡管這個(gè)過(guò)程聽(tīng)起來(lái)很基礎(chǔ),報(bào)表服務(wù)還是提供了下列特性:
◆支持4種不同的數(shù)據(jù)區(qū)域:列表,表格,矩陣和圖表。
◆提供了例如文本框,圖片,連接,矩形和子報(bào)表等一些列控件。
◆用戶(hù)可以通過(guò)參數(shù),條件過(guò)濾,用戶(hù)端排序,鉆取和文檔結(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ū)域類(lèi)型。報(bào)表服務(wù)提供了下列數(shù)據(jù)區(qū)域類(lèi)型:
◆表格
表格通過(guò)一行接一行的方式表現(xiàn)數(shù)據(jù)。列是固定的你無(wú)法擴(kuò)展,但是行可以向下展開(kāi)。因此,當(dāng)表格增長(zhǎng)時(shí),它將數(shù)據(jù)向下展開(kāi)。你也可以在表格內(nèi)將數(shù)據(jù)分組。
◆矩陣
A矩陣或者叫交叉表類(lèi)似于表格,但是行和列都是可以擴(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ū)域可能依賴(lài)于你使用的數(shù)據(jù)類(lèi)型、你希望報(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),依賴(lài)于重復(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è)面尺寸
◆用戶(hù)指定對(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è)面分割
你可以在矩形,表格,矩陣,列表,圖表和分組中的開(kāi)始或結(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ì)影響性能。?
◆子報(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ù),類(lèi)似表格,矩陣,列表和圖表這樣的數(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ī)叢書(shū)中”Using Customer Assemblies with Reports”部分。
聚合函數(shù)和范圍
報(bào)表服務(wù)提供了許多聚合函數(shù)可以在報(bào)表中創(chuàng)建總和或其他聚合。
每個(gè)匯總函數(shù)支持一個(gè)定義匯總范圍的范圍參數(shù)。范圍可以通過(guò)分組名稱(chēng),數(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ū)域中從第一行開(kāi)始計(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ū)域的名稱(chēng)做為參數(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ù)不支持指定工作表名稱(chēng)。
◆渲染擴(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)表中使用表格代替列表
表格使用固定的列寬。這很好的滿(mǎn)足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é)果,在任何客戶(hù)端上,基于圖像的報(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)被渲染。
使用圖像渲染為所有的客戶(hù)端創(chuàng)建同樣的報(bào)表
如果你希望在所有客戶(hù)端看到同樣的報(bào)表,你應(yīng)該使用圖像渲染。特別是當(dāng)報(bào)表渲染時(shí),HTML報(bào)表使用客戶(hù)端子體和瀏覽器設(shè)置。這意味著當(dāng)客戶(hù)端使用不同的瀏覽器時(shí)報(bào)表的布局會(huì)有所不同。因?yàn)閳D像文件在報(bào)表服務(wù)器上格式化,它們渲染成的圖片在任何客戶(hù)端上的顯示都是一樣的。
在報(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打開(kāi)查看。在很多方面上,PDF擴(kuò)展類(lèi)似于圖片擴(kuò)展,除了下列重要的差異:
◆在PDF報(bào)表中字體沒(méi)有被嵌入到報(bào)表中。?
◆文檔結(jié)構(gòu)圖被渲染成PDF書(shū)簽。
◆你可以在設(shè)備選項(xiàng)中指定頁(yè)面的寬度高度、邊距和PDF的分辨率。
◆渲染擴(kuò)展創(chuàng)建的PDF1.3版本的文件和Adobe Acrobat 4.0機(jī)器以后版本兼容。
◆PDF渲染擴(kuò)展不支持 RepeatWith屬性。
在客戶(hù)機(jī)中安裝適當(dāng)?shù)淖煮w
PDF擴(kuò)展無(wú)法在報(bào)表中嵌入字體。為了正確的查看報(bào)表的字體,你不僅需要在報(bào)表服務(wù)器上確認(rèn)安裝該字體,也要確認(rèn)該字體在查看報(bào)表的客戶(hù)端中正確安裝了。另外字體替代現(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)簽中。
客戶(hù)端變化
當(dāng)在客戶(hù)端顯示時(shí),HTML報(bào)表使用瀏覽器的特性來(lái)設(shè)置。另外字體的變化,其他的瀏覽器設(shè)置可以做相應(yīng)的處理改變。如果你想恰到好處的控制在所有客戶(hù)端上的布局,考慮使用圖像渲染擴(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)其滿(mǎn)足你的需求。
實(shí)用的報(bào)表設(shè)計(jì)技巧
本節(jié)提供了使用表達(dá)式來(lái)巧妙處理報(bào)表格式和布局的技巧和技術(shù)。??
使用矩形保持對(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)容不可見(jiàn)。另外,報(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è)符可提高用戶(hù)訪問(wèn)報(bào)表時(shí)的性能,因?yàn)楫?dāng)渲染報(bào)表剩余部分時(shí),用戶(hù)可以查看報(bào)表的第一頁(yè)。
使用篩選器代替查詢(xún)參數(shù)
報(bào)表服務(wù)有幾種方法動(dòng)態(tài)的過(guò)濾報(bào)表內(nèi)容:
◆當(dāng)返回叢數(shù)據(jù)源獲取數(shù)據(jù)時(shí)使用查詢(xún)參數(shù)過(guò)濾數(shù)據(jù)。
◆應(yīng)用于數(shù)據(jù)集或報(bào)表區(qū)域的報(bào)表篩選器,限制在報(bào)表中顯示的數(shù)據(jù)。
使用篩選器獲取所有的數(shù)據(jù),但是只有和用戶(hù)相關(guān)的數(shù)據(jù)被顯示。這也許比在數(shù)據(jù)源中過(guò)濾數(shù)據(jù)的效率要低。然而,這樣可以使我們只獲取一次數(shù)據(jù)并將數(shù)據(jù)存儲(chǔ)在快照中來(lái)服務(wù)于不同的用戶(hù)請(qǐng)求。換句話說(shuō),當(dāng)我們使用查詢(xún)參數(shù),每一個(gè)新的參數(shù)查詢(xún)你都要訪問(wèn)數(shù)據(jù)源。篩選器可以使我們執(zhí)行快照并獲取所有參數(shù)的結(jié)果。
在表格中添加輪換條
也許你需要?jiǎng)?chuàng)建帶有隔行漸變形式的表格或矩陣的報(bào)表。 這種欄從視覺(jué)上可以更好地在一個(gè)頁(yè)面上跟蹤不同的行。
為了更好的模擬用在生成大量報(bào)表的高速數(shù)據(jù)打印機(jī)中的老式綠條紙 你可以輪換條設(shè)置為綠色。
為了完成這個(gè)效果,可以使用Iif函數(shù)基于行數(shù)的奇偶性有條件指派背景色。例如:
| =iif(RowNumber(Nothing) Mod 2,"PaleGreen","White") |
在RDL文件中的描述應(yīng)該類(lèi)似于如下代碼:
|
|
在一個(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)該類(lèi)似于下列描述:
| ????? |
在頁(yè)眉和頁(yè)腳中添加全局變量值
在表6中顯示了Globals對(duì)象的成員,這些可以在報(bào)表的表達(dá)式中使用。
表6
| 名稱(chēng) | 類(lèi)型 | 描述 |
| PageNumber | Integer | 當(dāng)前頁(yè)數(shù)。僅在報(bào)表的頁(yè)眉和頁(yè)腳中使用。 |
| TotalPages | Integer | 報(bào)表的總頁(yè)數(shù)。僅在報(bào)表的頁(yè)眉和頁(yè)腳中使用。 |
| ExecutionTime | DateTime | 報(bào)表開(kāi)始執(zhí)行得日期和時(shí)間。 |
| ReportFolder | String | 包含報(bào)表的文件夾的路徑,例如salesreports/budgeting 或c:/sales/budget |
| ReportName | String | 報(bào)表的名稱(chēng),例如 currentbudget. |
你可以在報(bào)表的頁(yè)眉或頁(yè)腳中使用表達(dá)式顯示報(bào)表名稱(chēng)和執(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)該類(lèi)似于如下所示:
| =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ū)域,用戶(hù)可以從匯總視圖中鉆取數(shù)據(jù)的詳細(xì)信息。
接下來(lái),為包含該分組的文本框創(chuàng)建觸發(fā)開(kāi)關(guān)項(xiàng)。然后當(dāng)用戶(hù)點(diǎn)擊該文本框,隱含的數(shù)據(jù)變成可見(jiàn)的或數(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ī)叢書(shū)。
更多信息:http://www.microsoft.com/sql/?
總結(jié)
- 上一篇: CH423要如何使用,便宜的国产IO扩展
- 下一篇: ocm认证年薪多少_年薪 100 万在