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

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

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

  以下是我们要研究的:

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

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

  l 报表中自定义代码。

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

开始

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

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

表达式

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

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

2010012316141243.png 

  这样的表达式特征将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")

2010012316160266.png 

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

  iif (boolean statement, true result, false result)

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

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

常见函数

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

2010012316163811.png 

  现在让我们用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就可以确定要用那个颜色赋值给相应的单元格。

2010012316171767.png 

  注意为了使用这个函数我们需要这样写:=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()函数。这个函数将使用数据集返回的第一行数据,其它的将被忽略。

2010012316175393.png 

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

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

2010012316183261.png 

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

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

2010012316190612.png 

  单击确定,预览主报表。

矩阵

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

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

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

2010012316193468.png 

  运行起来是这个样子:

2010012316201911.png 

添加钻取

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

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

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

2010012316204587.png 

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

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

2010012316211072.png 

添加动态排序

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

2010012316213594.png 

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

2010012316220580.png 

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,头歌educoder初识sqlserver是一门介绍SQL Server数据库基础知识的课程。该课程主要包括SQL Server的安装、配置、数据库的创建、表的设计、数据的插入、更新、删除、查询等内容。通过学习该课程,可以初步了解SQL Server数据库的基本操作和使用方法。 ### 回答2: 头歌educoder初识SQL Server是一个关于初学者学习和了解SQL Server数据库管理系统的经历和过程。通过这个头歌educoder,我首次接触到了SQL Server,并开始学习如何使用它来管理数据库。 在学习中,我了解到SQL Server是由微软公司开发的数据库管理系统,它被广泛应用于企业级应用和数据管理。SQL Server具有强大的数据处理和管理功能,可以处理大规模数据的查询、更新和存储。 我首先学习了SQL Server的基本概念和术语,例如数据库、数据表、字段和记录等。我了解到数据库是一个用于存储和组织数据的容器,而数据表则是数据库中数据的逻辑结构。字段是数据表中的列,用于定义数据的类型和约束。记录则是数据表中的行,每一行代表一个具体的数据实例。 在学习SQL Server的语法和命令时,我掌握了一些基本的操作,例如创建数据库和表,插入数据,更新数据和删除数据等。我学会了使用SELECT语句进行数据查询,并了解了WHERE子句用于过滤数据。我还学习了如何使用JOIN子句将多个数据表连接在一起进行查询操作。 此外,我还学习了SQL Server的数据备份和恢复,以及权限管理和安全性等方面的知识。我了解到备份是保护数据安全的重要手段,可以在数据丢失或系统崩溃时进行数据恢复。权限管理则可以控制用户对数据库的访问和操作权限,确保数据的安全性。 总的来说,通过头歌educoder初识SQL Server,我对这个强大的数据库管理系统有了初步的了解和认识。我学会了SQL Server的基本操作和功能,并且意识到了学习SQL Server的重要性和实用性。我将继续深入学习和掌握更多高级的SQL Server技术和应用,以提升自己在数据库管理领域的能力。 ### 回答3: 在初次接触educoder时,我对于SQL Server这个数据库管理系统产生了浓厚的兴趣。SQL Server是由微软开发的一款强大的关系型数据库管理系统,它具有稳定性高、安全性强、性能优越等特点,广泛应用于企业级应用程序的开发和数据管理领域。 首先,SQL Server提供了友好的图形化用户界面,使得用户可以方便地进行数据库的管理和操作。通过直观的界面和菜单,我可以轻松创建数据库、表格和视图,执行SQL查询语句并进行数据的增删改查等操作。这方便了我对数据库的理解和使用。 其次,SQL Server具有强大的安全性能。它支持对数据库进行权限控制,通过给用户分配不同的权限,可以确保数据的安全性。此外,SQL Server还提供了强大的加密功能,可以对敏感数据进行加密存储,保障了数据的机密性。 另外,SQL Server在性能方面也表现出色。它采用了先进的查询优化技术,可以快速地处理大量数据,并且具有高并发性能。同时,SQL Server还提供了丰富的索引和分区功能,可以大大提高查询和数据处理的效率。 最后,SQL Server的应用广泛。不仅在企业级应用程序中得到了广泛应用,还被许多大型网站和云服务商所采用。因此,学习并熟练使用SQL Server对于我的职业发展和个人技能提升非常有帮助。 总之,初次接触educoder中的SQL Server让我对于这款数据库管理系统产生了浓厚的兴趣。它的稳定性、安全性、性能以及广泛应用的特点让我对于学习和使用SQL Server充满了期待。在未来的学习过程中,我将继续深入了解SQL Server,并且通过实践来提升自己的数据库管理和操作能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值