日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

[翻譯]初識(shí)SQL Server 2005 Reporting Services

系統(tǒng) 2195 0
原文: [翻譯]初識(shí)SQL Server 2005 Reporting Services Part 4

  這一篇是關(guān)于 SQL Server 2005 Reporting Services 四篇文章中最后一篇:

?

?

  Part 1 ,提供了創(chuàng)建基本報(bào)表的指南

?

  Part 2 ,介紹了創(chuàng)建動(dòng)態(tài)報(bào)表用到的 SSRS 核心特性和功能

?

  Part 3 ,完全介紹了嵌入到 SSRS 中的圖表控件

?

  這里,在 Part 4 ,我們把精力放在報(bào)表定義語言( RDL )上。 RDL 的定義在 MSDN2 給的很好,所以我在引用一下:

?

  " A report definition contains data retrieval and layout information for a report. Report Definition Language (RDL) is an XML representation of this report definition ."

?

  我們將查看一個(gè)典型 RDL 文件的組成部分,討論下怎樣使用 RDL 知識(shí)優(yōu)化和自定義報(bào)表。然后我們會(huì)了解一下報(bào)表設(shè)計(jì)器工具,這是隨著 SSRS 而來的一個(gè)全新的即席報(bào)表工具。作為一個(gè)報(bào)表開發(fā)者,你可以創(chuàng)建一個(gè)終端用戶可以使用的你提供的報(bào)表定義工具。怎么?有點(diǎn)迷惑?一會(huì)兒你就會(huì)了解。

?

  為了試驗(yàn)我的例子,你得安裝好了 SQL2005 SSRS VS2005. 如果對(duì)這個(gè)有疑問,可以轉(zhuǎn)回 Part 1 去查看。然后請(qǐng)下載相關(guān)源代碼文件。

?

  現(xiàn)在在 VS2005 新建一個(gè) BI SSRS 項(xiàng)目。選擇工程 - 添加已有項(xiàng),添加上共享數(shù)據(jù)源( ReportDB.rds )和報(bào)表定義文件, FirstReportMan.rdl.

?

報(bào)表定義語言

?

  報(bào)表定義語言是一種為了定義報(bào)表基于 XML 的架構(gòu)。而且從 VS2005 報(bào)表設(shè)計(jì)器生成的 SSRS2005 報(bào)表本質(zhì)上就是 XML 。每個(gè)報(bào)表都有表頭,表尾和主題。架構(gòu)定義了:

?

  l ???????? 報(bào)表布局 -RDL 文件中的主題部分定義了列在報(bào)表中的所有對(duì)象,包括字段,圖片和表格。

?

  l ???????? 各個(gè)數(shù)據(jù)集,數(shù)據(jù)集對(duì)應(yīng)的數(shù)據(jù)源一集數(shù)據(jù)連接信息(當(dāng)不適用數(shù)據(jù)源時(shí))。

?

  l ???????? 數(shù)據(jù)集中的字段信息。

?

  l ???????? 報(bào)表中使用的所有參數(shù)。

?

  您可以在這里看到對(duì) RDL 的整體描述:

?

  http://www.microsoft.com/sql/technologies/reporting/rdlspec.mspx

?

剖析一個(gè)典型的 RDL 文件

?

  熟悉 RDL 文件最簡單的方法就是深入分析一個(gè)典型的 RDL 文件。

?

  讓我們看一下下載的項(xiàng)目中的那個(gè) FirstReportMan.rdl 文件,打開 Visual Studio ,打開這個(gè)文件。在解決方案資源管理器上右擊 FirstReportMan.rdl ,選擇查看代碼選項(xiàng),這樣就會(huì)以 XML 的形式打開這個(gè)報(bào)表文件。整個(gè) XML 內(nèi)容在文件之中,但這里我們只看一下主要的部分。

?

文檔元素

?

?

  我們首先來看一下文檔元素:

?

  <?xml version="1.0" encoding="utf-8"?>
  <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/
????????????????? 2005/01/reportdefinition"
  xmlns:rd="http://schemas.microsoft.com/SQLServer/
????????????????? reporting/reportdesigner">

?

  文檔元素被稱作是報(bào)表——這很正常。它引用了兩個(gè) XML 命名空間:

?

數(shù)據(jù)源

?

?

  在 RDL 文件中,緊接著命名空間引用的就是數(shù)據(jù)源。在這個(gè)元素中,你可以為你的報(bào)表定義單個(gè)或多個(gè)數(shù)據(jù)源。

?

  <DataSources>
?  ?? <DataSource Name="ReportsDB">
?????  <DataSourceReference>ReportsDB</DataSourceReference>
????  ? <rd:DataSourceID>b75a1ec2-03ed-4562-921e-28ca4150b215</rd:DataSourceID>
  ??? </DataSource>
  </DataSources>

?

  可以看出,數(shù)據(jù)源標(biāo)記引用了我們的共享數(shù)據(jù)源 ReportDB 。而且還為數(shù)據(jù)源提供了一個(gè) GUID 。如果沒有使用共享數(shù)據(jù)源,結(jié)果應(yīng)該是這個(gè)樣子:

?

  <DataSource Name="ReportingDemo">
????? <rd:DataSourceID>f34d206b-ca72-4ca6-9d5c-4151cd7eadc3</rd:DataSourceID>
????? <ConnectionProperties>
??????? <DataProvider>SQL</DataProvider>
??????? <ConnectString>Data Source=SKYNET05"SKYNETSQL2005;Initial z
??????????? Catalog=ReportingDemo</ConnectString>
????? </ConnectionProperties>
  </DataSource>

?

邊距

?

?

  奇怪的是,緊接著數(shù)據(jù)源定義的是報(bào)表邊距。不過請(qǐng)記住這是 XML ,所以標(biāo)記的順序無關(guān),甚至不同報(bào)表擁有著不同的標(biāo)記順序。你還可能看到別的標(biāo)記,比如說 GUID 散落在報(bào)表各個(gè)角落。

?

  <BottomMargin>1in</BottomMargin>
  <RightMargin>1in</RightMargin>
  <rd:ReportID>b3751a5a-3ac4-4b97-bdc2-cea456baad26</rd:ReportID>
  <LeftMargin>1in</LeftMargin>
  <Width>5.625in</Width>
  ?<InteractiveHeight>11in</InteractiveHeight>
  ?<Language>en-US</Language>
  ?<TopMargin>1in</TopMargin>

?

報(bào)表參數(shù)

?

?

  報(bào)表參數(shù)是下一個(gè)重要的部分。每一個(gè)報(bào)表參數(shù)都有名字,數(shù)據(jù)類型和標(biāo)簽。標(biāo)簽用來作為用戶輸入的提示。每個(gè)參數(shù)還有一個(gè) ValidValue 部分。 ValidValue 部分可以作為下拉列表框里的內(nèi)容。

?

  <ReportParameters>
  ??? <ReportParameter Name="ReportTitle">
  ????? <DataType>String</DataType>
  ????? <AllowBlank>true</AllowBlank>
  ????? <Prompt>Report Title</Prompt>
  ????? <ValidValues>
  ??????? <ParameterValues>
  ????????? <ParameterValue>
  ??????????? <Value>My First Report</Value>
  ??????????? <Label>Title1</Label>
  ????????? </ParameterValue>
  ????????? <ParameterValue>
  ????????????<Value>Customer Report</Value>
  ??????????? <Label>Title2</Label>
  ????????? </ParameterValue>
  ??????? </ParameterValues>
  ????? </ValidValues>
  ??? </ReportParameter>
  ??? <ReportParameter Name="ReportingUserID">
  ????? <DataType>String</DataType>
  ??????<Prompt>ReportingUserID</Prompt>
  ??? </ReportParameter>
  ?</ReportParameters>

?

  在這個(gè) RDL 文件里有兩個(gè)參數(shù), ReportTitle ReportUserID ReportTitle 參數(shù)是一個(gè) string 類型的,它有兩個(gè)有效值, MyFirstReport CustomReport 。對(duì)應(yīng)著兩個(gè)標(biāo)簽, Title1 Title2. 如果用戶選擇了 Title1 ,那么報(bào)表將顯示 MyFirstReport. ReportUserID 也是一個(gè) string 類型的參數(shù),只不過沒有定義有效值。

?

主體

?

?

  接下來是報(bào)表的主體部分。主要有兩個(gè)標(biāo)記, Height ReportItems

?

  <Body>
  ?? <ReportItems>
  ????? …
  ?? </ReportItems>
  ?? <Height>0.875in</Height>
  </Body>

?

  高度屬性定義了報(bào)表主體的高度。而這里真正重要的是 ReportItems 元素。 RDL 文件中所有報(bào)表對(duì)象都在這里。仔細(xì)觀察就會(huì)發(fā)現(xiàn)在 ReportItems 元素下面有一個(gè)表格定義和兩個(gè)文本框定義。每個(gè)都定義了大小和位置。在表格里有這些定義:

?

  首先看一下表格 :MyFirstTable 。在表格定義的細(xì)節(jié)部分,我們定義了各個(gè)部分,如果有排序或者分組,那么就定義在 <grouping> <sorting> 里面。這里我們只展示一下 FirstName

?

  <Table Name="MyFirstTable">
  ?<DataSetName>ReportData</DataSetName>
  ?<Top>0.375in</Top>
  ?<ZIndex>2</ZIndex>
  ??? <Details>
  ????? <TableRows>
  ??????? <TableRow>
  ????????? <TableCells>
  ??????????? <TableCell>
  ????????????? <ReportItems>
  ??????????????? <Textbox Name="FirstName_1">
  ????????????????? <rd:DefaultName>FirstName_1</rd:DefaultName>
  ????????????????? <ZIndex>4</ZIndex>
  ??????????????????<Style>
  ??????????????????? <PaddingLeft>2pt</PaddingLeft>
  ??????????????????? <PaddingBottom>2pt</PaddingBottom>
  ??????????????????? <PaddingRight>2pt</PaddingRight>
  ??????????????????? <PaddingTop>2pt</PaddingTop>
  ????????????????? </Style>
  ??????????????????<CanGrow>true</CanGrow>
  ????????????????? <Value>=Fields!FirstName.Value</Value>
  ??????????????? </Textbox>
  ????????????? </ReportItems>
  ??????????? </TableCell>

?

  現(xiàn)在來看一下表格的表頭部分,我們?cè)谶@里定一個(gè)表頭的各個(gè)字段,對(duì)應(yīng)于表格各個(gè)列:

?

  <TableCell>
?????????????? <ReportItems>
???? ????????????<Textbox Name="FirstName">
?????????????????? <rd:DefaultName>FirstName</rd:DefaultName>
?????????????????? <ZIndex>9</ZIndex>
?????????????????? <Style>
???????????????????? <PaddingLeft>2pt</PaddingLeft>
???????????????????? <PaddingBottom>2pt</PaddingBottom>
???????????????????? <FontWeight>700</FontWeight>
???????????????????? <BackgroundColor>LightSeaGreen</BackgroundColor>
???????????????????? <Color>WhiteSmoke</Color>
???????????????????? <PaddingRight>2pt</PaddingRight>
???????????????? ????<PaddingTop>2pt</PaddingTop>
?????????????????? </Style>
?????????????????? <CanGrow>true</CanGrow>
?????????????????? <Value>First Name</Value>
???????????????? </Textbox>
?????????????? </ReportItems>
????????? </TableCell>

?

  最后我們定義了 TableColumn 元素,包含了各個(gè)列信息 :

?

  <TableColumn>
??????????? <Width>1.25in</Width>
??? </TableColumn>

?

PageHeader

?

  看完主題部分之后,我們來到了 PageHeader 部分,就像主題部分一樣,這里面也有 ReportItems 元素,同樣展示了各個(gè)元素。這里也有關(guān)于是不是在報(bào)表首頁和末頁顯示表頭信息的元素。

?

  <PageHeader>
  ?<ReportItems>
  ??? <Textbox Name="ReportTitle">
  ????? <rd:DefaultName>ReportTitle</rd:DefaultName>
  ????? <Width>3.25in</Width>
  ????? <Style>
  ??????? <PaddingLeft>2pt</PaddingLeft>
  ??????? <PaddingBottom>2pt</PaddingBottom>
  ??????? <FontWeight>700</FontWeight>
  ??????? <FontSize>16pt</FontSize>
  ??????? <PaddingRight>2pt</PaddingRight>
  ??????? <PaddingTop>2pt</PaddingTop>
  ????? </Style>
  ????? <CanGrow>true</CanGrow>
  ????? <Value>=Parameters!ReportTitle.Value</Value>
  ?</ReportItems>
  ?<Height>0.375in</Height>
  ?<PrintOnLastPage>true</PrintOnLastPage>
  ?<PrintOnFirstPage>true</PrintOnFirstPage>
  </PageHeader>

?

  In our page header, we just have a single texbox, called ReportTtitle

?

數(shù)據(jù)集

?

  數(shù)據(jù)集是下一個(gè)部分,每個(gè)數(shù)據(jù)集元素對(duì)應(yīng)于報(bào)表中的數(shù)據(jù)集。每一個(gè)數(shù)據(jù)集又一個(gè)帶有命令類型的查詢定義,直接連接到數(shù)據(jù)源。下面就是字段,每個(gè)字段都有字段名稱和類型,所以我們的數(shù)據(jù)集有如下定義:

?

  <DataSet Name="ReportData">
????? <Query>
????? ??<CommandType>StoredProcedure</CommandType>
??????? <CommandText>spr_CustomerSelectAll</CommandText>
??????? <DataSourceName>ReportsDB</DataSourceName>
????? </Query>
????? <Fields>
??????? <Field Name="CustomerID">
????????? <rd:TypeName>System.Int32</rd:TypeName>
????????? <DataField>CustomerID</DataField>
??????? </Field>

?

  最后是代碼元素。這一部分就是我們嵌入報(bào)表的自定義功能的代碼。

?

  <Code>Public Function GetColor(ByVal status as String) as String

  IF status = "100" Then
  ?? Return "White"
  End IF

  IF status = "101" Then
  ?? Return "Yellow"
  End IF

  IF status = "102" Then
  ?? Return "Tomato"
  End IF

  End Function
  </Code>

?

書寫自己的 RDL 文件

?

  現(xiàn)在我們明白了在前段報(bào)表設(shè)計(jì)器發(fā)揮作用是后臺(tái)做了什么事。理解了這些我們就可以在需要的時(shí)候?qū)懽约旱? RDL 報(bào)表了。我發(fā)現(xiàn)在 2005 中寫的代碼要比 2000 少多了。然而,懂得 RDL 能在別的方面發(fā)揮大的作用。你可以不非得用 Visual Studio 來進(jìn)行設(shè)計(jì),你可以用自己的報(bào)表設(shè)計(jì)工具了。

?

使用 Report Builder

  Report Builder SSRS 的一個(gè)輕量級(jí)的補(bǔ)充,開發(fā)人員可以利用這個(gè)開發(fā)一個(gè)基于 web 的一鍵式部署工具。這個(gè)工具允許用戶通過事先定義好的字段和功能函數(shù)來定義自己的報(bào)表。用戶可以使用拖拽的方法創(chuàng)建自定義報(bào)表。在不用給予用戶太多數(shù)據(jù)庫操作的權(quán)限的情況下,這是個(gè)不錯(cuò)的選擇。

?

定義報(bào)表

  在這個(gè)練習(xí)中我們將建造一個(gè)報(bào)表定義。首先創(chuàng)建一個(gè)報(bào)表模型項(xiàng)目。然后可以看到其中有三個(gè)文件夾:

?

  1. ???????? 數(shù)據(jù)源

?

  2. ???????? 數(shù)據(jù)源視圖

?

  3. ???????? 報(bào)表模型

?

添加數(shù)據(jù)源

?

  跟 RS 中其他地方一樣,可以通過數(shù)據(jù)源向?qū)?gòu)建。

?

添加數(shù)據(jù)源視圖

?

  數(shù)據(jù)源視圖允許開發(fā)人員在構(gòu)建報(bào)表的時(shí)候使用哪些數(shù)據(jù)表。也可以進(jìn)行關(guān)聯(lián)設(shè)置,這樣報(bào)表就會(huì)知道該怎么進(jìn)行連接操作。表格關(guān)聯(lián)可以使用外鍵或者名稱匹配架構(gòu)。如果使用名稱匹配架構(gòu),表格連接操作就會(huì)使用相同名稱的字段或者主鍵。

?

添加報(bào)表模型

?

  報(bào)表模型使用了數(shù)據(jù)源視圖以及其包含的部分,所以用戶可以利用這些元素來創(chuàng)建報(bào)表。報(bào)表模型也可以選擇單個(gè)的字段信息。

?

使用 Report Builder 創(chuàng)建報(bào)表

  我們可以在 windows 應(yīng)用上打開 ReportBuilder ,然后通過拖拽操作就可以創(chuàng)建報(bào)表。用戶可以決定要顯示的字段信息和報(bào)表格式。

?

  在建立報(bào)表之前得先安裝好。 Netframework2.0.

?

  導(dǎo)航到 http://localhost/Reports/ .

?

  可以看到有個(gè)按鈕式 ReportBuilder ,單擊,第一次加載可能比較慢,然后選擇模型,就可以進(jìn)行報(bào)表構(gòu)建工作了。

?

結(jié)論

  希望這一系列會(huì)對(duì) SSRS 方面有所幫助。

?

?

[翻譯]初識(shí)SQL Server 2005 Reporting Services Part 4


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 永福县| 北京市| 司法| 英吉沙县| 肥东县| 宜城市| 栾川县| 顺平县| 江西省| 河西区| 盱眙县| 壤塘县| 阿克苏市| 尉氏县| 九龙坡区| 平昌县| 北京市| 辽阳市| 神池县| 建昌县| 南投市| 博白县| 本溪| 郓城县| 乌兰县| 忻州市| 宝丰县| 屏南县| 许昌县| 翁源县| 乌兰县| 黔西县| 嘉祥县| 泸定县| 平顶山市| 安图县| 台中市| 皮山县| 梅州市| 临江市| 商南县|