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

 在Part 1文章中我们对SQL Server Reporting Services 2005(SSRS)有了一个初步的了解。我们分别通过报表向导和报表设计器构建了两个报表。在Part 2我们将以一个SSRS开发者的身份深入查看更多特征信息。

  以下是我们要研究的:

  l 表达式的用法。这些表达式可以让你动态的控制从控件属性到数据绑定的报表的各个方面。

  l 报表中用到的计算和操作的通用函数。

  l 报表中自定义代码。

  我们也会创建一个矩阵控件,创建一个子报表。最后我们会见识一下报表的动态钻取和排序。

开始

  为了运行示例,你需要安装和配置了SQL Server 2005, SQL Server 2005 Reporting Services和Visual Studio 2005,如果你还不太清楚该怎么做,那么可以回到Part 1去学习一下。然后下载源代码文件。这些文件中包含了Visual Studio 项目和创建ReportDemo数据库的SQL脚本。如果这些你都有了,那么可以直接创建数据库了。

  现在先创建一个商业智能项目。选择项目中的添加新项,把共享数据源ReportDb.rds和报表文件FirstReportMan.rdl添加到项目中。然后更改数据源中的相关配置信息以保障能连接到你的数据库。我们先从FirstReport.rdl开始,所以先在设计器中将它打开。

表达式

  表达式是写在代码中用来设定属性值的简短陈述。表达式可以设置报表中任意用到的数据属性:参数,全局变量,数据集中的字还有嵌入函数。

  SSRS2005在创建表达式方面有了很大的进步。现在提供了一个很直观的表达式编辑器。如果你滚动查看属性窗口,就会发现大多数控件的属性都可以通过表达式进行设置(表达式选项到处都是)。你也可以看到弹出的属性对话框中有很多写着fx的按钮。这些按钮就可以打开表达式编辑器。

  这样的表达式特征将SSRS2005变成了一个非常好用的工具。因为这使得从数据展现到如何展现都可以动态设置。而不是直接写死在里面。SSRS用表达式对属性进行设置。

  看一下你的报表,现在我们想要高亮显示从特定State来的客户信息。我们可以这样设计表达式:=iff(Fields!State.Value = “CA”, “Bold”, “Normal”)

  如果我们将这个表达式应用到表格的明细列,运行报表的时候,所有来自California的列都被高亮显示。如果你正需要这些数据,就会很方便。然而如果每个高亮显示的列都需要一个报表那就太滑稽了。所以我们得进行动态设置。当报表运行的时候根据传入的参数不同而高亮显示不同的内容。

  首先,先提添加一个参数。命名为HightlightState,设置如下的数值:

California

CA

Florida

FL

Louisiana

LA

Illinois

IL

Texas

TX

  单击确定。

  笔记:

  可以看到要对一个参数进行预先赋值操作的时候,有一个来自查询选项。你可以通过在报表设计器定义数据集来使用这个选项。

  下一步就是建立表达式。单击报表中的表格控件,可以看到表格的左边和上边多出了一列和一行表格,单击前边的图标,可以对正行进行属性设置。单击属性中的FontWeight中的表达式,输入=iif(Fields!State.Value = Parameters!HighlightState.Value, "Bold", "Normal")

  函数iif是SSRS中经常用到的一个表达式。格式是:

  iif (boolean statement, true result, false result)

  如果布尔表达式返回true那么函数将返回ture result,如果布尔表达式返回false,那么函数就会返回false result。布尔表达式会问:现在传进来的参数是不是等于当前的state code呢?如果返回true那么文本就会加粗显示,否则正常。

  转到预览选项卡,可以看到效果。

常见函数

  现在然我们回到表达式编辑器。在编辑器的下半部分有三列。第一列显示的是为创建表达式所用的分类列表,最后一个就是常见函数,展开这个节点选择时间和日期类别。在第二列中双击任意个元素,这样就会将其添加到编辑文本框中,如果把光标放在第一个括号一边,就会看到智能感知的信息:

  现在让我们用Year函数只显示某人的出生年份。选择DateOfBirth列的属性,在常规选项卡的值信息中单击表达式按钮进入表达式编辑器。把表达式改成:

=Year(Fields!DateOfBirth.Value)

  这样就行了,现在预览一下。

  值得注意的还有聚合函数。这些函数可以帮助你处理数据集中的数据。比如说,你的报表是关于一些商品的单价信息,这样就可以用Sum函数创造一个总价格。再比如,你有一个关于购买日期和每笔交易的购买数量报表,就可以通过AVG函数获得平均价格。

全局变量

  再次回到表达式编辑器。这次让我们单击第一列中的全局,第二列中就会显示提供给报表使用的全局变量。

  这一次让我们利用全局变量做一个对页数进行计数的报表。首先,给报表加上页脚,将四个文本框拖拽进页脚,把字体属性设置为8pt,按照下面方式进行设置:

Page

=Globals!PageNumber

of

=Globals!TotalPages

  预览报表就可以看到有“'Page 1 of 5'.”这样的信息。

  还有一些值得注意的全局参数:

  l ExcutionTime – 这个会显示运行报表需要的时间

  l ReportUrl – 这个保证你的报表来自正确的数据源

  l UserID – 这个显示报表运行的User ID

  你可以利用这些全局参数进行报表的基本诊断操作。你可以将这些参数加到页脚并利用参数对它们进行显示或者隐藏。这样在发布后,报表使用者就可以看到一个清爽的报表,而你可以看到跟多的信息。

自定义函数

  SSRS2005里面有100多个函数,这足以应付大多数情况的需要,但是有的时候你需要更灵活的控制。所以在这里你可以用VB.NET 或 C#进行编写自定义的表达式。

  现在让我们添加一个进去。

  打开报表设计器的布局选项卡,选择报表菜单中的报表属性,直接跳到代码选项卡。我们将写一个根据传入的数据不同而返回不同颜色的函数。然后在表格细节中对这个函数进行运用。

  把下面的代码拷贝进去:

  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

  单击确定关闭对话框。

  笔记:

  所有的颜色都在属性中的Color下拉列表中。

  我们现在有了一个函数,现在来包装成表达式。右击Customer Status列打开属性窗口。找到Background Color属性,从下拉列表中选择表达式。添加下面的代码创建一个表达式:

  =code.GetColor(Fields!CustomerStatus.Value)

  当报表运行的时候,这个函数会被处理,而且参数信息将会传递进去。函数根据参数决定该显示哪个颜色。SSRS就可以确定要用那个颜色赋值给相应的单元格。

  注意为了使用这个函数我们需要这样写:=code.<myfunction>.

  预览报表。

子报表

  子报表就是嵌入到另一个报表中的报表。子报表可以使用参数还有使用自己的数据集。值得注意的是其实SSRS中子报表是另外一个报表。实际上,在SSRS中,你可以单独运行一个子报表。

  为了创建子报表,只需要从工具箱中拖拽一个子报表控件到报表中然后设置它在哪个报表中呈现。如果子报表需要参数,你就得告诉主报表要把那个参数传递给子报表。其实很简单。

  现在在项目中添加一个报表MainReport.rdl,再创建一个使用共享数据源的数据集。使用下面的查询:

  SELECT CustomerID, FirstName, LastName FROM Customer

  转到布局选项卡,拖拽一个表格控件进去。选择第一列将客户的姓添加进去,第二列是名字。第三列的名字设置成Address。预览报表确定可以运行。

  再创建一个子报表MySubReport.rdl。同样创建一个使用共享数据源的数据集。使用下面的查询语句:

  SELECT Address, City, State, ZipCode

  FROM Customer

  WHERE (CustomerID = @CustomerID)

  转到布局选项卡,利用文本框控件显示地址信息。只需要把数据集字段拖拽进去就可以自动创建文本框控件。还可以注意到当这样做的时候,文本框中的数据  自动使用First()函数。这个函数将使用数据集返回的第一行数据,其它的将被忽略。

  现在用“100”这个书进行运行报表测试。

  现在回到MainReport.rdl主报表。为了进行嵌入操作,将一个子报表控件拖拽进Address列。右击子报表选择属性,将子报表设置成MySubReport。

  接下来转到参数选项卡,这里正是你将子报表连接到主报表的地方。在这里设置要将哪个参数传递个子报表相应的参数。  

  在参数名中选择CustomerID,参数值中选择=Fields!CustomerID.Value,这样就可以让子报表知道该显示那个客户的信息。

  单击确定,预览主报表。

矩阵

  下面我们要用矩阵控件来创建一个矩阵风格的报表。

  首先,在项目中添加一个MatrixReport.rdl报表。用共享数据源添加一个数据集,查询语句是Select * from Customer。

导航到报表设计器布局选项卡,将一个矩阵控件拖拽进来,将State拖进行,将CustomerStatus拖进列,将FirstName和LastName拖进数据区域。经过一点点美化后,应该是下面的效果:

  运行起来是这个样子:

添加钻取

  SSRS中的钻取功能可以使得你的报表像一个树一样可以展开和收缩。

  首先,建立一个AdvancedTable.rdl报表。用共享数据源添加数据集,查询语句是Select * from Customer query。

转到布局选项卡,将一个表格控件拖拽进去。首先我们得给表格控件添加分组。选中表格控件,右击前面的小图标,选择插入组。分组和排序属性对话框就弹出来了,在分组方式的表达式选择=Fields!State.Value,这样报表就会以State进行分组。现在把State字段拖拽到第一列组列。然后把FirstName,LastName和City拖进明细区域。美化一下进行预览。

  我们现在实现了分组,但是还不能进行钻取。选择表格控件,选择明细列前边的小图标,右击选择属性。展开Visibility部分,将Hidden属性设置为True,把ToggleItem属性设置为State。Hidden决定了报表运行时这一列的状态。如果设置为True那么开始是缩起和隐藏的。把ToggleItem属性设置为State,这样当报表运行的时候旁边就会向树状结构一样有个可以展开的小“+”号。

  预览报表发现只有States列显示,但是可以对其进行展开和收缩操作。

添加动态排序

  要对表格控件进行动态排序操作其实很容易。先打开FirstReportMan.rdl报表。转到报表设计器的布局选项卡。右击表头的FirstName文本框选择属性。转到交互式排序选项卡。将将交互式排序操作添加到词文本框复选框选中,然后设置排序表达式为=Fields!FirstName.Value,排序表达式是在这一列中显示的值。对其他列也进行类似设置。

  现在预览报表,就可以进行每一列的交互式排序。

总结

  我希望这些SQL Server Reporting Services 2005高级的主题能帮助你更好的与用户进行沟通。在Part 3中,我们将会看一下图标控件和它的多种多样的功能。

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

  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 4

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 4 这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇 ...

  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. 图解SSIS监视文件夹并自动导入数据

    原文:图解SSIS监视文件夹并自动导入数据 演示案例:让系统自动监视文件夹,并把文件夹下面的excel文件导入到sql中,之后清空目录.这个过程以往都需要写程序来实现或者定时执行,现在可以用ssis来 ...

  2. jvm在存储区域

    当区域执行的数据  JVM存储器的管理分为几个时间之后的数据区的实施:程序计数器.JavaVM栈.本地方法栈.Java堆.方法区(包括常量池的实现).   程序计数器 较小的内存空间,能够看作是当前线 ...

  3. Oracle存储过程详解(引用)+补充(转) dbms_output包 good

    执行存储过程时,execute和call的区别 EXEC is a sqlplus command that put its argument as an anonymous pl/sql block ...

  4. 使用方便git命令检查记录的版本号

    现在开始git大多数用户都经历过subversion,对于这两种开关的版本控制系统需要一段时间去适应.本文旨在帮助恢复一些,这些用户都熟悉的日志记录买家的习惯. 我们要熟悉一个详细的例子git中log ...

  5. Flux是一个Facebook团队的前端开发架构

    Flux是一个Facebook团队的前端开发架构 Flux introduction 本文组成: React 官方文档翻译 相关实践心得. 内容上是Flux的介绍,例子将会在以后写出.一旦稍微多了解一 ...

  6. jQuery语音播放插件

    自己做jQuery插件:将audio5js封装成jQuery语音播放插件   日前的一个项目需要用到语音播放功能.发现Audio5js符合需求且使用简单,又鉴于jQuery控件便于开发操作,于是有了以 ...

  7. Matlab.NET混合编程调用Figure窗体

    原文:[原创]Matlab.NET混合编程调用Figure窗体 1.前言 做Matlab.NET混合编程好几年了,虽然Matlab很多函数忘记得差不多了,但基本的东西还是能熟练使用.特别是在C#调用M ...

  8. java观察者模式(转)

    简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新. 不多说 ...

  9. OpenWrt arp 命令发布

    arp命令是用来查看mac与ip在消息路由器缓存表.这是一个基本的介绍了一下我就不说了. 但今天我的同事通过arp.可是在shell脚本就回显示没有此命令,我当时也感到非常费解. 于是乎.做了例如以下 ...

  10. LESS使用介绍

    使用: 在客户端使用 引入你的 .less 样式文件的时候要设置 rel 属性值为 "stylesheet/less": <link rel="stylesheet ...