原文:[翻译]初识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. Balanced Binary Tree(Java代码没有结束,是什么原因???)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  2. 基于PaaS人事部门间平台多重身份的技术解决方案

    1.系统状态 该系统采用一个范围的省,它包含省总部和各中心.十三市分公司.其中,各县(市)局和办事处城市管理部门:由省级总部部门管理中心,它仅包含主省党部的工作人员.另一种是不在系统中. 系统业务包含 ...

  3. 开展.net mvc3遇到怪事+解

    发展到今天.net mvc3遇到怪事. 使用Firefox浏览器.打开index页,求index该控制器是很多次,代码查询数据库的多个运行.server减速. 而且没有刷新页面,随着时间的推移有十二请 ...

  4. FZU 2082 过路费(树链剖分)

    FZU 2082 过路费 题目链接 树链抛分改动边的模板题 代码: #include <cstdio> #include <cstring> #include <vect ...

  5. Class loader:static

    package classloader; public class ClassLoaderDisplayDemo { public static void main(String[] args) { ...

  6. Android开发模板------自己定义SimpleCursorAdapter的使用

    使用SimpleCursorAdapter所设计的table(数据表)一定要有_id字段名称,否则会出现"找不到_id"的错误 SimpleCursorAdapter直接使用的方法 ...

  7. contentWindow,

    a>contentWindow 兼容各个浏览器,可取得子窗口的 window 对象.b>contentDocument Firefox 支持,> ie8 的ie支持.可取得子窗口的 ...

  8. cocos2dx 解释二具体的启动过程:内存管理和回调

    在上一篇的第二部分中.我们有一句代码待解释的: // Draw the Scene void CCDirector::drawScene(void) { -...     //tick before ...

  9. 十天学Linux内核之第五天---有关Linux文件系统实现的问题

    原文:十天学Linux内核之第五天---有关Linux文件系统实现的问题 有时间睡懒觉了,却还是五点多醒了,不过一直躺倒九点多才算起来,昨晚一直在弄飞凌的嵌入式开发板,有些问题没解决,自己电脑系统的问 ...

  10. Kd-Tree算法原理和开源实现代码

    本文介绍一种用于高维空间中的高速近期邻和近似近期邻查找技术--Kd-Tree(Kd树). Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,经常使用于在大规模的高维数 ...