ReportingServices: 应用程序开发人员指南
Reporting services
如何使用 SSRS 创建示例报表
引言
Microsoft 推出了自己的报表服务,并与 SQL 服务器数据库相结合,引入了 Microsoft SQL Server 报表服务 (SSRS)。它提供了商业智能项目类型的项目,从而使大型、中型和小型公司都能从中受益。这也有助于做出更好的业务决策。
SSRS 在报表的数据渲染、交付和安全性方面提供了多种扩展,从而使其具有更高的可编程性。这种创新的方法使报表能够以更少的开发工作量[与其它报表服务相比]创建,并提供自定义的安全选项。
SSRS 是一个全面的报表平台,报表存储在集中的 Web 服务器(或一组服务器)上。由于报表是集中的,用户可以从一个地方运行报表。集中化的报表也意味着报表的部署非常简化。
架构
使用 SSRS 后,其架构就像一个小型操作系统。报表管理器是核心人物,它充当管理器,负责决定报表的运行计划,并维护报表服务器上的用户配置文件。此外,您还可以要求报表管理器查看或搜索特定报表。它还有助于报表服务器中的站点属性配置和文件夹管理。
有一个称为报表服务器的东西,所有报表都驻留在那里。所有与 SSRS 相关的其他活动都在报表服务器上进行。我认为它就像报表工具的工作站。
报表设计器基本上是一个托管在 Microsoft Visual Studio IDE 中的图形化工具。报表设计器提供了一个具有数据、布局和预览的选项卡式窗口,允许您交互式地设计报表。您可以添加数据集来容纳新的报表设计思路,或根据预览结果调整报表布局。此外,它还提供查询生成器、表达式编辑器和向导,指导您完成创建简单报表的过程。
还有一个计划和分发处理器,它将报表推送到电子邮件收件箱或 FTP 位置。就像一个操作系统将进程添加到队列一样,计划和分发处理器将已处理[由报表处理器执行]的报表添加到队列中。
报表处理器,顾名思义,执行服务器上的报表。现在我们了解了 SSRS 的基本知识,让我们开始创建第一个报表。
入门
在系统上安装SQL Server报表服务后,启动 Visual Studio IDE。
转到“文件”->“新建项目”,您将看到一个带有“新建项目”的提示。
从“项目类型”中选择“商业智能项目”。由于这是我们的第一个项目,请在模板窗格中使用“报表项目向导”。
指定项目名称以及项目将放置的位置。
单击“确定”后,将出现报表向导屏幕。单击“下一步”以进入下一个屏幕。
在下一个屏幕上,您需要为报表创建数据源。此屏幕类似于创建 udl 文件时的连接字符串创建向导。但是,在这里您只需单击“编辑”即可指定服务器名称以及将从该服务器使用的数据库。连接字符串会自动创建。
此数据源可以设置为共享数据源,供多个报表访问。这可以通过选中下面的复选框来完成。
单击“编辑”后,将出现“连接属性”屏幕。您可以在此处添加服务器名称和数据库名称。
这里
1: 选择服务器名称
2: 使用 SqlServer 身份验证
3: 选择或输入数据库
4: 测试连接
然后按确定
单击“下一步”后,将出现“查询生成器”屏幕。您可以在此处添加表、选择列以及执行SQL语句。
根据适合您报表的查询,创建 SQL 语句并继续。单击下一步,将出现报表类型屏幕。您可以选择“表格”或“矩阵”。为使事情更简单,请使用“表格”格式。
单击下一步,您将进入表设计屏幕,您将被提示将字段显示为页面、组或详细信息。字段将放置的相关位置显示在旁边。
单击下一步,将出现表样式提示,其中包含一个列表供您选择。从中选择任何一个。
下一步,将出现部署详细信息屏幕。指定报表服务器名称;通常是https:///ReportServer。如果您使用的是其他服务器,则可以将位置指定为http://servername/ReportServer。同时提供部署文件夹。
最后,需要输入报表名称,这样,您的第一个报表就完成了。
您可以像前面提到的那样,使用报表设计器的 3 个选项卡预览报表以更改数据规格。
这里
1: 选择预览
2: 在此处输入凭据
3: 选择查看报表
排序
右键单击此字段 Productid 并选择属性。
选择交互式排序选项卡。
选中复选框(为此文本框添加交互式排序操作)。
然后按确定。转到预览。
使用报表传递参数
假设您需要将值从报表 1 传递到报表 2,那么在普通的 asp.net 应用程序中,我们通常使用上下文或查询字符串。让我们看看如何做到这一点。
为了演示这一点,我创建了两个报表 Parent.rdl 和 Child.rdl。子报表有一个名为 ChildProdID 的输入参数。选择父报表中的任何列,如下图所示。
右键单击此字段,您将看到以下参数
选择文本框属性,然后选择导航选项卡。
选择“跳转到报表”选项卡,并将报表设置为您想跳转到的报表,即子报表。
这意味着该列将被视为超链接,单击此超链接我们将跳转到子报表。但是,我们需要为子报表提供一个参数才能执行。因此,我们单击导航选项卡上位于“参数”按钮。单击此按钮后,将出现另一个选项卡 - 参数。
在下拉列表中,我们可以选择该报表的参数名称。对于参数值,选择需要评估为报表要执行的参数名称的字段。
运行父报表并单击任何产品 ID 以导航到子报表。
手动创建报表
上面的部分,虽然可能过于简单,但确实展示了如何零代码、零属性设置就能运行一个报表。显然,这样的报表不能满足大多数开发需求,但不要低估此选项作为更复杂报表的起点。一旦您使用报表向导创建了一个报表,您就可以对其进行任何修改。
在本节中,我们将从头开始创建一个更真实的报表,包括如何创建和使用共享数据源对象、存储过程,以及如何格式化报表、设置报表属性和使用报表参数。
创建共享数据源
在我们开始报表之前,我们将构建一个共享数据源,即一个报表服务器上所有报表都可以共用并使用的公共数据源。虽然每个报表都可以包含自己的连接信息,但使用共享数据源是一种好做法,因为它可以节省您大量的时间和精力。这样,您只需设置一次连接信息。例如,假设您的公司有开发、测试和生产环境。如果您将连接信息放入每个报表中,当您发布到开发、测试和生产环境时,您需要每次更改它。如果您使用共享数据源,您仍然需要为这三个环境中的每一个设置一个数据源对象,但您可以简单地将报表发布到每个环境,它们将自动使用与该环境关联的连接信息。
从菜单中选择项目 > 添加新项 > 选择数据源。在“常规”选项卡中,将数据源命名为“ReportsDB”。将类型保留为Microsoft SQL Server。单击右侧的编辑按钮,然后输入 Reporting Demo 的连接信息,如前所述。在“共享数据源”屏幕上单击“确定”,数据源即完成。
添加新报表
从菜单中选择项目 > 添加新项。选择报表并将其命名为“FirstReportMan.rdl”。将一个新报表添加到项目中,并且报表设计器将在数据选项卡中打开。此时,让我们仔细看一下报表设计器工具。报表设计器窗口的顶部有三个选项卡:数据、布局和预览。数据选项卡用于为报表构建数据源。布局选项卡是实际的报表设计器,您可以在其中设置页眉、页脚和报表的数据表示。预览选项卡允许您直接在 Visual Studio 2005 中运行报表,而无需先将其发布到报表服务器。如果您的报表需要参数,预览选项卡会要求您在运行报表之前填写它们。
我们需要做的第一件事是获取数据到我们的报表中。在数据选项卡的顶部,从下拉列表中选择<数据集…>
将打开数据集对话框
将数据集命名为“ReportData”,然后从下拉列表中选择ReportsDB数据源。将命令类型选择为StoredProcedure,并在查询字符串框中输入“spr_CustomerSelectAll”。单击“确定”关闭对话框。
通过单击报表设计器顶部的红色感叹号 (!) 来测试数据集。这将执行查询并显示结果。如果您想向报表中添加多个数据集,可以重复这些步骤。
设置报表显示
接下来,切换到布局选项卡。在这里,您可以实际构建报表显示。首先,将一个表格从“工具箱”拖到报表的“正文”部分。默认情况下,表格在顶部显示一个标题行,中间显示一个详细信息行,底部显示一个页脚行。您可以通过右键单击其中一个列并选择两个插入列选项之一来向表格添加额外的列。
单击 Visual Studio 环境左侧“工具箱”下的数据集选项卡。您应该会看到ReportData数据集。展开它,选择FirstName并将其拖到表格正文行的第一个单元格。这将显示第一个名字字段在第一列中。然后将LastName放在第二列,将CustomerStatus放在第三列。
请注意,当您将FirstName列拖到表格的正文行时,SSRS 会猜测该行的名称。它将其称为“First Name”。您可以单击预览选项卡来查看报表。
添加格式
让我们添加DateOfBirth列到表格中。您可以通过突出显示并拖动来扩展和缩小列的大小。
如果您想去掉表格的页脚行,然后单击表格中的任何字段。您会看到一个灰色框围绕着表格。右键单击正文行开头的图标,然后单击表格页脚选项以取消选中它。
接下来是表格标题。要以相同的方式格式化标题中的所有单元格,请单击并拖动以选择它们。打开属性窗口并设置背景颜色、字体等。
但是请注意,如果您想更改文本的对齐方式或大小,则应使用顶部的菜单进行操作,而不是通过属性窗口。同样,您可以单击预览选项卡来查看报表。
添加报表标题
表格已经有一个标题,但报表也可以有标题和页脚。报表标题和页脚会出现在报表的每一页上。将报表设计器置于布局模式,然后从菜单中选择报表 > 页眉。报表正面上方会出现一个标有页眉的新区域。将一个文本框拖到页眉中,然后直接单击它。键入“我的第一个报表”,不是在属性窗口中,而是在控件上。
要调整标题的文本样式和大小,请突出显示文本框并使用顶部菜单的选项。
格式化
每个字段都可以有格式。让我们来处理那个难看的出生日期字段。时间信息是多余的,所以让我们正确地格式化日期。右键单击包含出生日期的单元格,然后选择属性。接下来,选择格式选项卡。
单击“格式代码”字段右侧的第二个按钮(标记为“…”)。打开对话框后,使用标准选项。在左侧列表中选择日期,然后选择
右侧您想要的示例日期格式。单击“确定”关闭对话框。
单击“确定”关闭属性窗口,然后单击预览选项卡查看报表。
设置报表属性
要访问报表属性,您需要处于报表设计器的布局选项卡上。当您单击此选项卡时,一个新的菜单项报表将被激活。此菜单提供了打开和关闭报表标题和页脚部分(如我们所见)、添加嵌入式图像、设置报表属性以及设置报表参数的选项。
设置报表打印设置不像其他产品那样直观。在报表布局选项卡中,您会看到报表顶部有一个标尺。该标尺以英寸为单位。标准纸张尺寸为 8.5 x 11 英寸。SSRS 中的默认设置为内容区域周围有 1 英寸的边距。因此,在 8.5 英寸宽且左右边距各为 1 英寸的情况下,您有 6.5 英寸用于内容。如果超过此尺寸,超过 6.5 英寸的内容在打印时会溢出到第二张纸上。它不会自动切换到横向。
要实现横向报表,您必须进行正确的报表设置。导航到报表设计器的布局选项卡。从报表菜单中选择报表属性。切换到对话框的布局选项卡。要切换到横向打印,您需要将页面宽度更改为 11 英寸,将页面高度更改为 8.5 英寸。
在同一个布局选项卡上,您还可以设置报表以多列显示数据,并控制边距。默认情况下,所有边距都设置为 1 英寸。请记住,如果您的报表宽度加上左右边距大于打印机的宽度,在打印报表时会出现溢出。
使用参数
有两种方法可以向报表添加参数。第一种是使用数据源中的查询参数。第二种是通过报表参数对话框设置参数。我们将都做。
查询参数
首先,我们将使用数据源查询设置参数。导航到数据选项卡,然后单击数据集下拉框旁边的“…”按钮。将打开数据集对话框,允许您编辑数据集的查询。将查询字符串从“spr_CustomerSelectAll”更改为“spr_CustomerSelectByState”。
单击“确定”,然后通过单击数据选项卡工具栏上的红色感叹号 (!) 来运行查询。您将被提示为 StateCD(州代码)输入参数值。输入“CA”并单击“确定”。查询应返回所有居住在加利福尼亚州的客户。
切换到预览选项卡。报表不会直接运行,而是应该有一个位置供您输入“StateCD”的值并运行报表。输入“CA”并单击查看报表按钮。您应该看到按州过滤的报表。
要编辑参数或添加新参数,请切换到报表设计器的布局选项卡,并从报表菜单打开报表参数对话框。首先,我们将使“州代码”提示更友好一些。选择参数列表框中的StateCD,然后在“参数属性”框中,将提示更改为“State”。在可用值部分,在第一行输入“California”和“CA”。在第二行输入“Louisiana”和“LA”。
这将使“州值”提示变为下拉列表。您还可以将其他数据集构建到报表中,并使用这些数据集中的值作为下拉列表的条件。
报表参数
现在让我们添加一个不用于查询的参数。从报表菜单打开报表参数对话框,然后单击添加按钮。为新参数命名为“ReportTitle”。其数据类型应为字符串。将提示设置为“Report Title”。单击“确定”并关闭对话框。
将一个新的文本框拖到报表页眉区域。右键单击它并选择表达式选项。在编辑表达式对话框中,选择参数。双击ReportTitle参数。此文本框现在将显示您传递给Report Title参数的值。
切换到预览选项卡并尝试一下。
发布您的报表
到目前为止,您一直在 Visual Studio 2005 环境中运行报表,但要使其有用,您必须将其发布到报表服务器。最简单的方法是让 Visual Studio 发布您的报表。
首先,在项目资源管理器中右键单击项目,然后选择属性。
将TargetServerURL设置为报表服务器的 URL。使用TargetReportFolder属性为您的报表设置一个文件夹。如果文件夹不存在,发布者会为您创建它。您还需要注意的另一个关键点是OverwriteDataSources属性。当此属性设置为“True”时,它会在您发布时自动复制所有数据源对象。当设置为“False”时,它会复制任何新的数据源对象,但不会覆盖现有的对象。这在使用开发、测试和生产服务器时很重要。您可以将一组数据源对象发布到每个服务器,指向正确的数据库,而无需担心您的报表在每个环境中正在访问哪个数据库。
从生成菜单中选择部署解决方案。这将把项目发布到报表服务器上的选定文件夹。您也可以通过在解决方案资源管理器中右键单击文件并选择部署来部署单个报表。
您的报表发布后,您可以通过浏览器访问并运行它,网址为http://<servername(STPPC1742)>/<reportservername(myreport)>。从主页,您应该能够找到您发布到的文件夹以及其中的报表。选择一个报表进行运行。在页面顶部,您可以输入任何报表参数值,然后运行报表。从这里,您还可以打印或导出报表。
子报表:
子报表是嵌入到另一个报表中的报表。子报表可以接受参数并执行自己的数据集。需要注意的一个关键方面是,SSRS 中的子报表实际上只是另一个报表(与某些报表工具不同,子报表是特殊构造)。事实上,在 SSRS 中,您可以独立执行子报表。
要将子报表添加到报表中,只需将子报表控件拖到报表中,然后告诉它要显示哪个报表。如果子报表需要参数,您必须告诉主报表要将哪个值传递给子报表以满足其参数要求。这实际上非常简单。
让我们向项目中添加一个新报表,并称之为MainReport.rdl。使用共享数据源和查询创建一个新的数据集
SELECT CustomerID, FirstName, LastName FROM Customer
切换到布局选项卡。将一个表格拖到报表详细信息区域。将第一列设置为显示客户的名字(通过将该列从数据集选项卡拖到详细信息行),并将第二列设置为显示客户的姓氏。将第三列标记为“Address”。预览报表,以确保其正常工作。
创建另一个报表,并称之为MySubReport.rdl。这次,创建一个使用共享数据源的数据集,并使用以下查询文本
SELECT Address, City, State, ZipCode
FROM Customer
WHERE (CustomerID = @CustomerID)
在布局选项卡中,使用文本框创建地址布局,如图 5 所示。您可以通过单击数据集选项卡中的字段并将其拖到设计界面上来简单地将文本框拖到屏幕上。您还会注意到,执行此操作时,用于设置文本框值属性的表达式使用了First()函数。此函数将使用数据集返回的第一个行中的值。所有其他返回的行将被忽略。
现在预览报表,并将“CustomerID”参数设置为“100”。
让我们跳回MainReport.rdl。要嵌入子报表,请将子报表控件拖到标记为“Address”的列的详细信息单元格中。右键单击子报表控件并选择属性。在属性对话框中,从子报表下拉列表中选择MySubReport。
接下来,切换到参数选项卡。在这里,您将子报表连接到主报表。您可以通过指示主报表中的哪个值将传递给子报表来满足其参数要求。
在参数名称列中选择CustomerID,在参数值列中选择 =Fields!CustomerID.Value。这将把子报表连接到表格行中显示的任何客户。
单击“确定”关闭对话框,然后预览主报表。当报表运行时,它的外观如下:
矩阵
创建示例报表,并将报表类型选择为矩阵,如下所示。
然后单击下一步按钮。
从上面的窗口中,从可用字段中选择页面、列、行和详细信息。还可以启用钻取(可选)。
SSRS 中的钻取功能允许您拥有报表中可以展开和折叠的区域,非常类似于树状视图。
单击下一步按钮,将打开以下窗口。
单击完成关闭对话框,然后预览主报表。当报表运行时,它的外观如下:
您可以使用树状 +/- 控件查看客户公司名称。.
创建图表:
SQL Server 2005 报表服务包含一个基本的图表控件,可以很好地处理大多数情况,并且也有第三方图表控件可用。图表控件允许您为x轴设置类别,为y轴设置数据点,并且您可以添加一个或多个系列到图表中。
要创建图表,您可以将图表控件拖到布局选项卡中的报表设计器上。图表控件会自动进入“设置我”模式,允许您将数据集字段拖放到类别、数据和系列区域。拖到类别区域的字段用于x轴,而拖到数据区域的字段用作定义条形图、饼图或折线图的数据点。您需要每个区域中至少有一个字段才能创建有用的图表,尽管您也可以根据需要添加更多字段。
右键单击图表控件,将打开图表属性窗口。
通过使用此功能,我们可以编辑图表属性。
然后预览报表。当报表运行时,它的外观如下: