原文:[翻译]初识SQL Server 2005 Reporting Services Part 4

  这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇:

  Part 1,提供了创建基本报表的指南

  Part 2,介绍了创建动态报表用到的SSRS核心特性和功能

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

  这里,在Part 4,我们把精力放在报表定义语言(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."

  我们将查看一个典型RDL文件的组成部分,讨论下怎样使用RDL知识优化和自定义报表。然后我们会了解一下报表设计器工具,这是随着SSRS而来的一个全新的即席报表工具。作为一个报表开发者,你可以创建一个终端用户可以使用的你提供的报表定义工具。怎么?有点迷惑?一会儿你就会了解。

  为了试验我的例子,你得安装好了SQL2005,SSRS,VS2005. 如果对这个有疑问,可以转回Part 1去查看。然后请下载相关源代码文件。

  现在在VS2005新建一个BI SSRS项目。选择工程-添加已有项,添加上共享数据源(ReportDB.rds)和报表定义文件,FirstReportMan.rdl.

报表定义语言

  报表定义语言是一种为了定义报表基于XML的架构。而且从VS2005报表设计器生成的SSRS2005报表本质上就是XML。每个报表都有表头,表尾和主题。架构定义了:

  l         报表布局-RDL文件中的主题部分定义了列在报表中的所有对象,包括字段,图片和表格。

  l         各个数据集,数据集对应的数据源一集数据连接信息(当不适用数据源时)。

  l         数据集中的字段信息。

  l         报表中使用的所有参数。

  您可以在这里看到对RDL的整体描述:

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

剖析一个典型的RDL文件

  熟悉RDL文件最简单的方法就是深入分析一个典型的RDL文件。

  让我们看一下下载的项目中的那个FirstReportMan.rdl文件,打开Visual Studio,打开这个文件。在解决方案资源管理器上右击FirstReportMan.rdl,选择查看代码选项,这样就会以XML的形式打开这个报表文件。整个XML内容在文件之中,但这里我们只看一下主要的部分。

文档元素

  我们首先来看一下文档元素:

  <?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">

  文档元素被称作是报表——这很正常。它引用了两个XML命名空间:

数据源

  在RDL文件中,紧接着命名空间引用的就是数据源。在这个元素中,你可以为你的报表定义单个或多个数据源。

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

  可以看出,数据源标记引用了我们的共享数据源ReportDB。而且还为数据源提供了一个GUID。如果没有使用共享数据源,结果应该是这个样子:

  <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>

边距

  奇怪的是,紧接着数据源定义的是报表边距。不过请记住这是XML,所以标记的顺序无关,甚至不同报表拥有着不同的标记顺序。你还可能看到别的标记,比如说GUID散落在报表各个角落。

  <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>

报表参数

  报表参数是下一个重要的部分。每一个报表参数都有名字,数据类型和标签。标签用来作为用户输入的提示。每个参数还有一个ValidValue部分。ValidValue部分可以作为下拉列表框里的内容。

  <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>

  在这个RDL文件里有两个参数,ReportTitle和ReportUserID。ReportTitle参数是一个string类型的,它有两个有效值,MyFirstReport和CustomReport。对应着两个标签,Title1和Title2. 如果用户选择了Title1,那么报表将显示MyFirstReport. ReportUserID也是一个string类型的参数,只不过没有定义有效值。

主体

  接下来是报表的主体部分。主要有两个标记,Height和ReportItems。

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

  高度属性定义了报表主体的高度。而这里真正重要的是ReportItems元素。RDL文件中所有报表对象都在这里。仔细观察就会发现在ReportItems元素下面有一个表格定义和两个文本框定义。每个都定义了大小和位置。在表格里有这些定义:

  首先看一下表格:MyFirstTable。在表格定义的细节部分,我们定义了各个部分,如果有排序或者分组,那么就定义在<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>

  现在来看一下表格的表头部分,我们在这里定一个表头的各个字段,对应于表格各个列:

  <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元素,包含了各个列信息:

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

PageHeader

  看完主题部分之后,我们来到了PageHeader部分,就像主题部分一样,这里面也有ReportItems元素,同样展示了各个元素。这里也有关于是不是在报表首页和末页显示表头信息的元素。

  <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

数据集

  数据集是下一个部分,每个数据集元素对应于报表中的数据集。每一个数据集又一个带有命令类型的查询定义,直接连接到数据源。下面就是字段,每个字段都有字段名称和类型,所以我们的数据集有如下定义:

  <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>

  最后是代码元素。这一部分就是我们嵌入报表的自定义功能的代码。

  <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文件

  现在我们明白了在前段报表设计器发挥作用是后台做了什么事。理解了这些我们就可以在需要的时候写自己的RDL报表了。我发现在2005中写的代码要比2000少多了。然而,懂得RDL能在别的方面发挥大的作用。你可以不非得用Visual Studio来进行设计,你可以用自己的报表设计工具了。

使用Report Builder

  Report Builder是SSRS的一个轻量级的补充,开发人员可以利用这个开发一个基于web的一键式部署工具。这个工具允许用户通过事先定义好的字段和功能函数来定义自己的报表。用户可以使用拖拽的方法创建自定义报表。在不用给予用户太多数据库操作的权限的情况下,这是个不错的选择。

定义报表

  在这个练习中我们将建造一个报表定义。首先创建一个报表模型项目。然后可以看到其中有三个文件夹:

  1.         数据源

  2.         数据源视图

  3.         报表模型

添加数据源

  跟RS中其他地方一样,可以通过数据源向导构建。

添加数据源视图

  数据源视图允许开发人员在构建报表的时候使用哪些数据表。也可以进行关联设置,这样报表就会知道该怎么进行连接操作。表格关联可以使用外键或者名称匹配架构。如果使用名称匹配架构,表格连接操作就会使用相同名称的字段或者主键。

添加报表模型

  报表模型使用了数据源视图以及其包含的部分,所以用户可以利用这些元素来创建报表。报表模型也可以选择单个的字段信息。

使用Report Builder创建报表

  我们可以在windows应用上打开ReportBuilder,然后通过拖拽操作就可以创建报表。用户可以决定要显示的字段信息和报表格式。

  在建立报表之前得先安装好。Netframework2.0.

  导航到http://localhost/Reports/.

  可以看到有个按钮式ReportBuilder,单击,第一次加载可能比较慢,然后选择模型,就可以进行报表构建工作了。

结论

  希望这一系列会对SSRS方面有所帮助。

[翻译]初识SQL Server 2005 Reporting Services Part 4的更多相关文章

  1. [翻译]初识SQL Server 2005 Reporting Services Part 3

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 3 这是关于SSRS文章中四部分的第三部分.Part 1提供了一个创建基本报表的递阶教程.Part 2 ...

  2. [翻译]初识SQL Server 2005 Reporting Services Part 2

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 2 在Part 1文章中我们对SQL Server Reporting Services 2005(S ...

  3. [翻译]初识SQL Server 2005 Reporting Services Part 1

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 1 构建和部署基本报表 如果曾经存在一项工作使得“真正的”开发者给他的上司泡蘑菇,那就是构建报表.毕竟 ...

  4. Display Database Image using MS SQL Server 2008 Reporting Services

    原文 Display Database Image using MS SQL Server 2008 Reporting Services With the new release of MS SQL ...

  5. [转]SQL Server 2005 Integration Services (SSIS) (3) - Business Intelligence Development Studio

    本文转自:http://blog.csdn.net/me_online/article/details/1546281 三,SQL Server Integration Services 开发环境– ...

  6. SQL SERVER 2008 Reporting Services 的一些小问题集合

    实验环境:服务器  Windows Server  2008 R2 Standard 64bit                   数据库  SQL SERVER 2008 R2 Standard ...

  7. 实现SQL Server 2008 Reporting Services匿名访问报表有两种方法

    一.通过修改SQL Server 2008的配置文件,去掉Windows的验证. 1.首先我们找到SQL安装目录下的两个Web.config配置文件,默认安装目录分别是(C:\Program File ...

  8. SQL Server 2005 Integration Services (SSIS)数据源之MySQL

    一安装MySQL数据库的ODBC驱动 下载MySQL Connector ODBC 3.51.rar 单击setup按默认安装即可! 如下图所示,在ODBC数据源管理器中看到“MySQL ODBC 3 ...

  9. 安装 SQL Server 2005 的硬件和软件要求(官方全面)

    SQL Server 2005 安装要求 本主题介绍了安装 SQL Server 205 的硬件和软件要求,以及查看安装文档的说明. 硬件和软件要求(32 位和 64 位) 访问 SQL Server ...

随机推荐

  1. hdu 4035 Maze(期待更多经典的树DP)

    Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submi ...

  2. 【Hibernate步步为营】--复合主键映射具体解释

    上篇文章讨论了继承映射,它是对象模型中最主要的特性,对于继承映射它的主要区分是字段类型的不同,所以在生成表结构时须要有新列来标识数据的类型,能够使用<subclass>标签并在标签中加入d ...

  3. RSA加密解密(PHP Demo)

    $private_key = '-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDpoODVtnSztGyb//p+g/Ob36jb3jzWzS2qovOj ...

  4. groovy install,gvm,groovysh简述(转)

    1.1 安装Groovy Groovy主页:http://www.groovy-lang.org 确保本地系统安装了Java 1.1.1 在Windows系统上安装Groovy 1.创建环境变量GRO ...

  5. Sonar相关汇总

    http://www.sonarqube.org/downloads/ http://docs.sonarqube.org/display/SONAR/Documentation/ 公司前段时间推动项 ...

  6. 【android】ImageView的src和background以及两者之间的神奇的差异

    一.ImageView中XML属性src和background的差别: background会依据ImageView组件给定的长宽进行拉伸.而src就存放的是原图的大小,不会进行拉伸.src是图片内容 ...

  7. 一些有用的javascript实例分析(一)

    原文:一些有用的javascript实例分析(一) 本文以http://fgm.cc/learn/链接的实例索引为基础,可参见其实际效果.分析和整理了一些有用的javascript实例,相信对一些初学 ...

  8. uva10827-Maximum sum on a torus(矩阵最大和的变形)

    题目;uva10827-Maximum sum on a torus(矩阵最大和的变形) 题目大意:就是uva108的变形,矩阵能够连通,就是能够从后面连到前面.这里把矩阵复制三遍,然后又一次生成一个 ...

  9. mac_Alfred_快捷设置

    1.安装(不说了去 Google 吧) 2.基础快捷键:option+space 3.打开应用程序:Alfred 几乎是一切程序的入口,你再也不需要找妈妈要开始菜单了.用快捷键呼出Alfred,输入任 ...

  10. hdu 2066 一个人的旅行 最短路径

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...