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

原文:[翻译]初识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方面有所帮助。

 

 

时间: 2024-10-02 18:50:58

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

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

原文:[翻译]初识SQL Server 2005 Reporting Services Part 1 构建和部署基本报表 如果曾经存在一项工作使得"真正的"开发者给他的上司泡蘑菇,那就是构建报表.毕竟那并不是真正的开发,更像是制作美化的格式.而且你所使用的构建报表的工具试图提供一个抽象层,这个经常妨碍你对报表的真正掌控.我以前经常听到这些争论.如果这听上去像你曾经在一个水制冷器旁边的对话,那么我请你仔细关注一下SQL Server 2005 Reporting Services(SSR

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

原文:[翻译]初识SQL Server 2005 Reporting Services Part 2   在Part 1文章中我们对SQL Server Reporting Services 2005(SSRS)有了一个初步的了解.我们分别通过报表向导和报表设计器构建了两个报表.在Part 2我们将以一个SSRS开发者的身份深入查看更多特征信息. 以下是我们要研究的: l 表达式的用法.这些表达式可以让你动态的控制从控件属性到数据绑定的报表的各个方面. l 报表中用到的计算和操作的通用函数. l

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

原文:[翻译]初识SQL Server 2005 Reporting Services Part 3 这是关于SSRS文章中四部分的第三部分.Part 1提供了一个创建基本报表的递阶教程.Part 2展现了为制作动态报表所用到的SSRS2005的核心特性和功能.这一部分中我们将把注意力转向SSRS中的图表控件. 微软的图表控件其实是Dundas 图标控件的按比例缩小版.不管是不是缩小版,我敢说这个的确非常好用.对好多人来说,他们使用SSRS就是看中了这个控件. 在这篇中我们要创建一个带有图表控件

微软SQL Server 2000 Reporting Services介绍(四)

server|services|微软 微软SQL Server 2000 Reporting Services介绍(四) [摘要 ] 本文对Reporting Services的一些不太常见的功能进行了分析,最后根据使用情况列举了Reporting Services的一些不足的地方,估计这些不足都会在正式版中解决. [关键字] Reporting Services,.NET Framework. DrillThrough,rdl文件,rds文件 n rdl文件元素 在上一篇文章里简单的分析了rd

report-使用Microsoft SQL Server 2008 Reporting Services制作报表

问题描述 使用Microsoft SQL Server 2008 Reporting Services制作报表 使用Microsoft SQL Server 2008 Reporting Services制作报表,折线图上显示一条平均数,希望在这条线的后面显示这条线的数值怎么实现?要是用显示数据标签的话会每个点都显示太乱了. 解决方案 http://www.microsoft.com/china/sql/2008/prodinfo/reporting.aspx

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 Server 2008 Reporting Services has introduced a new feature that will help report developers (Business Intelligence BI professionals) to display imag

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

实验环境:服务器  Windows Server  2008 R2 Standard 64bit                   数据库  SQL SERVER 2008 R2 Standard 64bit 问题1:在SQL Server 2008下,配置了Reporting Services后,在IE里输入http://localhost/Reports/Pages/Folder.aspx从客户端用IE访问后,出现下面错误                                  

SQL Server 2005 Analysis Services数据挖掘算法扩展方法

本文是对英文原文SQL Server Data Mining Managed Plug-In Algorithms Tutorial的部分翻译及整理,主要是描述SSAS数据挖掘算法的基本扩展方法和开发过程.本文的内容只是原文的一部分,如果想了解更多信息可以下载原文.英文原文在本文附件中下载. SSAS为我们提供了九种数据挖掘算法,但是在应用中我们需要根据实际问题设计适当的算法,这个时候就需要扩展SSAS,使它能应用更多的算法,SSAS有比较好的可扩展性,它提供了一个完整的机制来进行扩展,只要继承

SQL Server 2005新特性

一.企业级数据管理 在当今的互联世界中,数据和管理数据的系统必须始终为用户可用且能够确保安全,有了SQL Server 2005,组织内的用户和IT专家将从减少应用程序宕机时间.提高可伸缩性及性能.更紧密的安全控制中获益.SQL Server 2005 也包括了很多新的和改进的功能来帮助企业的IT团队更有效率的工作.SQL Server 2005 包括了几个在企业级数据管理中关键的增强: 易管理 可用性 可伸缩性 安全性 1.易管理 SQL Server 2005 能够更为简单的部署.管理和优化