原文:[翻译]初识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的更多相关文章
-
[翻译]初识SQL Server 2005 Reporting Services Part 3
原文:[翻译]初识SQL Server 2005 Reporting Services Part 3 这是关于SSRS文章中四部分的第三部分.Part 1提供了一个创建基本报表的递阶教程.Part 2 ...
-
[翻译]初识SQL Server 2005 Reporting Services Part 4
原文:[翻译]初识SQL Server 2005 Reporting Services Part 4 这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇 ...
-
[翻译]初识SQL Server 2005 Reporting Services Part 1
原文:[翻译]初识SQL Server 2005 Reporting Services Part 1 构建和部署基本报表 如果曾经存在一项工作使得“真正的”开发者给他的上司泡蘑菇,那就是构建报表.毕竟 ...
-
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 ...
-
[转]SQL Server 2005 Integration Services (SSIS) (3) - Business Intelligence Development Studio
本文转自:http://blog.csdn.net/me_online/article/details/1546281 三,SQL Server Integration Services 开发环境– ...
-
SQL SERVER 2008 Reporting Services 的一些小问题集合
实验环境:服务器 Windows Server 2008 R2 Standard 64bit 数据库 SQL SERVER 2008 R2 Standard ...
-
实现SQL Server 2008 Reporting Services匿名访问报表有两种方法
一.通过修改SQL Server 2008的配置文件,去掉Windows的验证. 1.首先我们找到SQL安装目录下的两个Web.config配置文件,默认安装目录分别是(C:\Program File ...
-
SQL Server 2005 Integration Services (SSIS)数据源之MySQL
一安装MySQL数据库的ODBC驱动 下载MySQL Connector ODBC 3.51.rar 单击setup按默认安装即可! 如下图所示,在ODBC数据源管理器中看到“MySQL ODBC 3 ...
-
安装 SQL Server 2005 的硬件和软件要求(官方全面)
SQL Server 2005 安装要求 本主题介绍了安装 SQL Server 205 的硬件和软件要求,以及查看安装文档的说明. 硬件和软件要求(32 位和 64 位) 访问 SQL Server ...
随机推荐
-
学习建模 - UML
最轻量级的工具下载地址 http://staruml.io/download 下载解压依赖:libgcrypt11 https://pan.baidu.com/s/1i3wb6M5 学习地址 http ...
-
(原创)通用查询实现方案(可用于DDD)[附源码] -- 简介
[声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html). [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...
-
<;textarea>;输入框提示文字
背景 看了过时的资料,花费大把时间,不过也有收获,还是写写吧! 分析 有同学可能想到直接在<textarea>标签内输入帮助文字,但是这又有一个新问题--因为<textarea> ...
-
vue单页面程序
gitHub地址:https://github.com/lily1010/vue_singlePage 举个栗子: <!DOCTYPE html> <html> <hea ...
-
进程间通信IPC:消息队列,信号量,共享内存
2015.3.4星期三 阴天 进程间通信:IPC 文件对象:记录文件描述符,文件开关等 IPC标示符:系统全局的流水号两个进程要通信,打开的是唯一的对象进行通讯,通过key操作 XSI IPC:消息队 ...
-
高通/苹果/联发科:手机CPU那些事
如今人们买手机,都比较关心采用了什么CPU,因为CPU直接决定了这台手机的性能,CPU之于手机就好比人的大脑,它是整台手机的控制中枢系统,也是逻辑部分的控制中心.又相当于车的发动机,发动机越强劲,车子 ...
-
PDF在线预览
1.所需插件jquery.media.js或者pdfobject.js 代码: <html> <head> <style type="text/css" ...
-
VS2010 ,工程文件减肥
写一个bat文件来清理VS2010工程文件. 将其放入到工程文件夹下,双击即可自动将sdf,ipch等占用空间很大的文件删除. 这样的方式较之于转移浏览数据库文件的位置而言更为灵活一些,不用特别的设置 ...
-
修改android 开机画面
对于使用安卓手机的人来说,能够*定制手机的各种界面是每个用户之所以喜欢安卓系统的最根本的缘由,比如手机的开机界面中的bootanimation.zip文件.本文就如何修改开机界面,做一个简单的流程介 ...
-
Python hashlib and hmac
hashlib hashlib提供了常用的摘要算法:MD5, SHA1等等 摘要算法:也成哈希算法,散列算法.通过一个函数把任意长度的数据转换成一个长度固定的数据串.主要用在存储一些不能被修改和查看的 ...