教程:向报表添加参数(报表生成器)
可以使用 SQL Server Reporting Services (SSRS) 中的报表生成器,为 Reporting Services 分页报表添加参数,使报表读者能够筛选特定值的数据。 报表参数是针对你在数据集查询中包含的每个查询参数自动创建的。 参数的数据类型确定了参数在报表视图工具栏上显示的方式。
下图显示了一个分页报表,其中包含了根据所选参数筛选的数据:
在本教程中,你将了解:
- 使用嵌入的数据源和查询创建分页报表
- 使用查询参数来创建报表参数并配置属性
- 使用数据集来控制报表参数的可见数据
- 定义参数的默认值与自定义值
完成本教程的估计时间是 25 分钟。
注意
以下程序提供了有关使用报表生成器的简要说明。 在某些情况下,多个向导操作会合并到一个步骤中。 有关屏幕截图的详细分步说明,请参阅教程:创建基本表报表(报表生成器)。 本文介绍如何浏览报表服务器、选择数据源、创建数据集等。
先决条件
有关要求的信息,请参阅教程先决条件(报表生成器)。
使用表或矩阵向导创建报表。
按照以下步骤使用表或矩阵向导创建分页(矩阵)报表:
通过计算机、Reporting Services Web 门户或 SharePoint 集成模式启动报表生成器。
将打开“新建报表或数据集”对话框。 如果对话框未打开,请选择“文件”>“新建”。
选择“新建报表”选项卡,然后在右侧窗格中选择“表格或矩阵向导”。
在“选择数据集”页面中,选择“创建数据集”选项,然后选择“下一步”。
在“选择数据源的连接”页上,选择数据源。 从下拉列表中选择一个数据源,或浏览到报表服务器并选择一个源。 数据源的类型必须是 SQL Server。
在“常规”选项卡上,选择“测试连接”以验证是否能连接到数据源。
应会看到一条弹出消息:“已成功创建连接”。请选择“确定”以清除弹出消息。
要完成数据源安装,选择“确定”,然后选择“下一步”。
在“设计查询”页中,选择“编辑为文本”。
在查询设计器对话中,将以下 Transact-SQL 查询粘贴到顶部框中:
;WITH CTE (StoreID, Subcategory, Quantity) AS ( SELECT 200 AS StoreID, 'Digital SLR Cameras' AS Subcategory, 2002 AS Quantity UNION SELECT 200 AS StoreID, 'Camcorders' AS Subcategory, 1954 AS Quantity UNION SELECT 200 AS StoreID, 'Accessories' AS Subcategory, 1895 AS Quantity UNION SELECT 199 AS StoreID, 'Digital Cameras' AS Subcategory, 1849 AS Quantity UNION SELECT 306 AS StoreID, 'Digital SLR Cameras' AS Subcategory, 1579 AS Quantity UNION SELECT 306 AS StoreID, 'Camcorders' AS Subcategory, 1561 AS Quantity UNION SELECT 306 AS StoreID, 'Digital Cameras' AS Subcategory, 1553 AS Quantity UNION SELECT 306 AS StoreID, 'Accessories' AS Subcategory, 1534 AS Quantity UNION SELECT 307 AS StoreID, 'Accessories' AS Subcategory, 1755 AS Quantity UNION SELECT 307 AS StoreID, 'Camcorders' AS Subcategory, 1631 AS Quantity UNION SELECT 307 AS StoreID, 'Digital SLR Cameras' AS Subcategory, 1772 AS Quantity) SELECT StoreID, Subcategory, Quantity FROM CTE
此查询合并了公用表表达式中多个 Transact-SQL SELECT 语句的结果。 表达式根据 Contoso 示例数据库中相机的简化销售数据来指定值。 子类别有数码相机、数码单反 (SLR) 相机、摄像机和附件。
在查询设计器工具栏上选择“运行 (!)”。
该查询运行并显示 StoreID、Subcategory 和 Quantity 字段的结果集。
结果集包含 11 行数据,以显示四个店铺的每个子类别的商品销售数量。 存储名称不是结果集的一部分。 接下来,你将在本教程中从单独的数据集查找与商店标识符对应的商店名称。
此查询不包含查询参数。 稍后,你将在本教程中添加查询参数。
要在向导中继续,选择“下一步”。
设置报表布局的格式,并添加总计
该向导提供了用于在报表中显示数据的初始设计。 在下面的程序中,将销售量值组织到了按“子类别”分组的行中,一个 StoreID 一列。 预览窗格可帮助你在完成报表设计之前展现对数据进行分组的结果。
在“排列字段”页面上将表格数据整理成组:
从“可用字段”框中,将“子类别”字段拖到“行组”框。
将 StoreID 字段拖到“列组”框。
将“数量”字段拖到“值”框。
“数量”数据由 Sum 函数(即数值字段的默认聚合)自动聚合。 该值为
[Sum(Quantity)]
。要在向导中继续,选择“下一步”。
在“选择布局”页的“选项”下,选择“显示小计和总计”选项。
运行报表时,最后一列显示所有商店 (StoreID) 每个子类别的总数量。 最后一行显示每个商店 (StoreID) 的所有子类别的总数量。
选择“下一步”以预览表格,然后选择“预览”窗格。 运行报表时,应会看到演示表格布局的三行:
第一行对表格重复一次以显示列标题。
第二行对每个 StoreID 重复一次,以显示销售的商品数量以及每个子类别的数量。
第三行重复一次,以显示所有商店销售的商品总数和按子类别划分的总数。
选择“完成”。
报表生成器将矩阵添加到设计图面。 该表包含三行和三列:子类别、[StoreID] 和总计。
增加表宽度,以便子类别数据可在报表中的单行上显示:
在设计图面上,在矩阵中选择,以显示行和列控键。 控键沿表格边缘显示为灰色条。
指向“子类别”和 StoredID 列之间的线条,以显示双箭头光标。
选择并拖动线条,以增加“子类别”列的宽度:
在“主文件夹”选项卡上,选择“运行”以预览报表。
报表将在报表服务器上运行并显示进行报表处理的时间:
在当前矩阵设计中,列标题会显示商店标识符,但不显示商店名称。 接下来,你将添加表达式以便在包含商店标识符/商店名称对的数据集中查找商店名称。
创建查询参数、报表参数并配置属性
在查询设计器中,可以编辑查询和添加参数。 添加查询参数时,报表生成器将自动为报表创建单值参数。 每个参数都有多个具有默认值的属性,例如,名称、提示和数据类型。 可以根据报表要求来配置这些属性。
添加查询参数并创建报表参数
当向查询添加查询参数时,报表生成器将自动创建单值报表参数,其中名称、提示符和数据类型使用默认属性。
按照以下步骤来添加查询参数:
在“运行”选项卡上,选择“设计”以返回到设计视图。
在“报表数据”窗格中,展开“数据集”文件夹。 右键单击 DataSet1,并选择“查询”。
“查询设计器”对话框将打开。 现有查询在对话框的顶部框中显示。
在对话框上的两个框之间使用分隔符,并增加顶部框的大小。
滚动到顶部框中的底部,以便看到查询的最后一行。
选择 Enter,可向查询末尾添加新行。
将以下 Transact-SQL
WHERE
子句添加为查询的最后一行:WHERE StoreID = (@StoreID)
WHERE
子句将检索的数据限制为由查询参数\@StoreID
指定的商店标识符。在查询设计器工具栏上选择“运行 (!)”。
此时将打开“定义查询参数”对话框,提示用户为查询参数
\@StoreID
输入值。提示
如果看不到完整的表格单元格和列标题,则增大对话框的大小。
在“参数值”框中,输入 200,然后选择“确定”:
结果集显示了标识符为 200的商店销售的附件、摄像机和数码 SLR 相机数量。
选择“确定”关闭“查询设计器”。
在“报表数据”窗格中,展开“参数”节点:
节点现在包含了名为 StoreID 的报表参数。 选择参数时,参数的属性将在设计图面上的“参数”窗格中显示。 可使用此窗格设置报表参数的布局格式。
提示
如果“参数”窗格不可见,则选择“视图”,然后选择“参数”复选框。
更新报表参数的属性
创建报表参数之后,可以调整参数的属性值。 在教程示例中,StoreID 报表参数具有默认的数据类型 Text。 由于商店标识符是一个整数,因此可将数据类型更改为 Integer。
按照以下步骤来更改报表参数的数据类型:
在“报表数据”窗格的“参数”文件夹中,右键单击 StoreID 参数,然后选择“参数属性”。
在“报表参数属性”对话框中,在“常规”选项卡上配置以下属性:
提示:输入“Store Identifier?”。 当你运行报表时,此提示出现在报表查看器工具栏上。
数据类型:在下拉列表中,选择“整数”。 此设置为提示中允许的输入配置了数据类型。
可以保持其他属性和选项不变。
选择确定以应用更改。
选择“运行” 以预览报表。 报表查看器现在将显示提示“Store Identifier?”作为 StoreID 参数的值。
在报表查看器工具栏的“Store identifier?” 提示下,输入 200,然后选择“查看报表”:
使用数据集来提供值
通过向报表读者提供可能值的下拉列表,可以确保报表读者仅输入参数的有效值。 该数值集可以来自于你指定的数据集或列表。 可用值必须由具有查询的数据集提供,该查询不包含对参数的引用。
为有效参数值创建数据集
按照以下步骤创建列出参数有效值的数据集:
在“运行”选项卡上,选择“设计”以返回到设计视图。
在“报表数据”窗格中,右键单击“数据集”节点,然后选择“添加数据集”。
在“数据集属性”对话框中,配置以下属性和选项:
对于“Name”属性,请输入 Stores。
选择“使用在我的报表中嵌入的数据集”选项。
对于“查询类型”属性,请验证是否选择了“文本”选项。
在“查询”框中,键入以下查询:
SELECT 200 AS StoreID, 'Contoso Catalog Store' as StoreName UNION SELECT 199 AS StoreID, 'Contoso North America Online Store' as StoreName UNION SELECT 307 AS StoreID, 'Contoso Asia Online Store' as StoreName UNION SELECT 306 AS StoreID, 'Contoso Europe Online Store' as StoreName
选择确定以应用更改。
“报表数据”窗格使用 StoreID 和 StoreName 属性在“数据集”节点下添加 Stores 数据集。
指定可用值的列表
拥有具有可用值的数据集后,可更新报表属性以标识数据集和属性,从而填充报表查看器工具栏上的可用值列表。
通过以下步骤,为参数提供数据集中的可用值:
在“报表数据”窗格的“参数”文件夹中,右键单击 StoreID 参数,然后选择“参数属性”。
在“报表参数属性”对话框中,在“可用值”选项卡上配置以下属性:
选择“从查询中获取值”选项。
对于“数据集”属性,从下拉列表中选择 Stores。
对于“值字段”属性,从下拉列表中选择 StoreID。
对于“标签字段”属性,从下拉列表中选择 StoreName。 标签字段指定值的显示名称。
切换到“常规”选项卡,并将“提示”更改为“商店名称:”。
选择确定以应用更改。
报表读者现在将从商店名称列表而非商店标识符列表中进行选择。 参数数据类型保持为 Integer,因为参数是基于商店标识符而不是商店名称。
选择“运行” 以预览报表。 报表查看器现在将显示提示“商店名称:”作为 StoreID 参数的值。
在报表查看器工具栏中,提示现在显示一个下拉列表,其中包含初始值“选择值”:
从下拉列表中,选择“Contoso Catalog Store”,然后选择“查看报表”。
报表显示了商店显示名称为 Contoso Catalog Store(对应于商店标识符 200)的商店销售的附件、摄像机和数码 SLR 相机数量。
在数据集中查找名称/值对
数据集可以同时包含标识符参数和对应的名称参数。 如果只有标识符值,可以在数据集中查找相应的名称。 对于此方法,需要创建的数据集,其中包含了名称/值对。
按照以下步骤,从数据集中查找名称的值:
在“运行”选项卡上,选择“设计”以返回到设计视图。
在设计图面上,矩阵的列标题行中,右键单击
[StoreID]
参数,然后选择“表达式”。在“表达式”对话框中,配置以下属性:
在顶部的为以下项设置表达式: Value 框中,删除所有文本。
在“类别”对话框中,展开“常见函数”节点,然后选择“杂项”。 “项”框将更新以显示一组函数。
在“项”框中,双击“Lookup”。 顶部框将更新以显示表达式
=Lookup(
。 “示例”框显示Lookup
函数语法的示例。在顶部框中,粘贴以下表达式:
=Lookup(Fields!StoreID.Value,Fields!StoreID.Value,Fields!StoreName.Value,"Stores")
Lookup
函数将采用 StoreID 报表参数的值,在“Stores”数据集中查找该值,并返回 StoreName 值。
选择确定以应用更改。
列标题将更改为复杂表达式 <<Expr>>。
选择“运行” 以预览报表。
在报表预览中,每列顶部的列标题现在显示商店名称而不是商店标识符。
配置默认值和自定义值
可为报表参数配置默认值,以便报表自动运行,而无需提示读取器输入。 可从现有值列表中选择参数的默认值,也可以指定自定义值。
从数据集指定默认值
按照以下步骤,使用数据集配置默认值:
在“运行”选项卡上,选择“设计”以返回到设计视图。
在“报表数据”窗格的“参数”文件夹中,右键单击 StoreID 参数,然后选择“参数属性”。
在“报表参数属性”对话框中,在“默认值”选项卡上配置以下属性:
选择“从查询中获取值”选项。
对于“数据集”属性,从下拉列表中选择 Stores。
对于“值字段”属性,从下拉列表中选择 StoreID。
选择确定以应用更改。
选择“运行” 以预览报表。
报表现在默认显示提示值“Contoso North America Online Store”,因为它是数据集“Stores”的结果集的第一个值。 报表显示商店标识符 199(对应于商店显示名称 Contoso North America Online Store)的数字相机销售数量,。
提供自定义默认值
还可提供一个自定义值,用作参数的默认值:
在“运行”选项卡上,选择“设计”以返回到设计视图。
在“报表数据”窗格的“参数”文件夹中,右键单击 StoreID 参数,然后选择“参数属性”。
在“报表参数属性”对话框中,在“默认值”选项卡上配置以下属性:
选择“指定值”选项,然后选择“添加”。 新的值行将添加到“值”框中。 下拉列表中的默认值为 (Null)。
在下拉列表框中,输入 200。
选择确定以应用更改。
选择“运行” 以预览报表。
报表现在显示提示值“Contoso Catalog Store”,因为它是标识符为 200 的商店的显示名称。 报表显示了标识符为 200的商店销售的附件、摄像机和数码 SLR 相机数量。
使用参数增强报表
可以通过多种方式来使用报表参数增强报表。 以下部分介绍了几种自定义技术:
- 识别报表读者当前选择的参数
- 允许报表者筛选报表数据
- 支持报表中的多值参数
- 为报表数据的条件可见性添加布尔参数
显示读者选择的参数
当报表读者对报表有疑问时,此操作可帮助用户获知他们当前的参数选择。 可以在报表中保留用户为每个参数的选定的值。 实现这一点的一种方式是在页面页脚的文本框中显示参数。
按照以下步骤,在页面页脚上显示带有标签的所选参数值:
在“运行”选项卡上,选择“设计”以返回到设计视图。
右键单击页面页脚,选择“插入”,然后选择“文本框”:
拖动带时间戳的文本框旁边的文本框。 使用该文本框的侧手柄并扩展宽度。
在“报表数据”窗格中“参数”节点下,将 StoreID 参数拖到页面页脚上的文本框中。 文本框将更新以显示
[@StoreID]
值。更新文本框,为参数值添加标签:
请在文本框中选择,直到插入光标出现在现有表达式之后,然后输入一个空格。
从“报表数据”窗格中,将参数 StoreID 拖到文本框。 文本框将更新以显示
[@StoreID] [@StoreID]
。在文本框中,右键单击第一个
[StoreID]
参数,然后选择“表达式”。在表达式对话框中,在顶部的为以下项设置表达式: Value 框中更新表达式。 将文本
Value
替换为文本Label
。
选择确定以应用更改。
文本框将更新以显示
[@StoreID.Label] [@StoreID]
。选择“运行” 以预览报表。
报表现在会显示页面页脚中所选商店的名称和标识符,以及时间戳信息。
使用参数来筛选报表数据
筛选器可帮助控制在从外部数据源获取数据后在报表中使用哪些数据。 为了让读者能够控制他们在报表中要看到的数据,可以在矩阵的筛选器中包含报表参数。
通过这些步骤在矩阵筛选器中指定参数:
在“运行”选项卡上,选择“设计”以返回到设计视图。
在报表矩阵中,右键单击列标题,然后选择“Tablix 属性”。
在“Tablix 属性”对话框中,选择“筛选器”选项卡,然后选择“添加”。 此时将显示一个新的筛选器行。
对于“表达式”属性,从下拉列表中选择 StoreID 数据集。 数据类型框显示 Integer。 当表达式值为数据集字段时,将自动设置数据类型。
对于“运算符”属性,请确认选择了“等于” (=) 号。
对于“值”属性,请输入 [@StoreID]。
[@StoreID]
是一个简单表达式语法,它表示更长的表达式=Parameters!StoreID.Value
。
选择确定以应用更改。
选择“运行” 以预览报表。
报表仅显示“Contoso Catalog Store”的数据。
在报表查看器工具栏上,对于 Store name?,选“Contoso Asia Online Store”,然后选择“查看报表”。
矩阵将显示与所选商店对应的数据。
使用多值参数
多值参数是一个值数组。 在数据集查询中,查询语法必须一个值是否包含在一组值中。 在报表表达式中,表达式语法必须访问一个值数组而不是单个值。
若要将一个参数从单值更改为多值,则也需要更改查询和包含对该参数的引用的所有表达式(包括筛选器)。
按照以下步骤更改现有的单值参数,以支持多个值:
在“运行”选项卡上,选择“设计”以返回到设计视图。
在“报表数据”窗格的“参数”文件夹中,右键单击 StoreID 参数,然后选择“参数属性”。
在“常规”选项卡上,选择“允许多个值”选项,然后选择“确定”。
更新查询以正确处理值:
在“报表数据”窗格中,展开“数据集”节点,右键单击 DataSet1 数据集,然后选择“查询”。
在“查询设计器”对话框中,滚动到顶部框中的查询底部。
在查询最后一行的 Transact-SQL
WHERE
子句中,将等于号 (=
) 更改为IN
:WHERE StoreID IN (@StoreID)
IN
运算符测试一个值是否包含在一组值中。单击“确定”,以应用更改。
更新参数筛选器以正确处理多个值:
在报表矩阵中,右键单击列标题,然后选择“Tablix 属性”。
在“Tablix 属性”对话框中,选择“筛选器”选项卡。
对于“运算符”属性,请从下拉列表中选择“In”。
单击“确定”,以应用更改。
更新页面页脚,以正确显示多值参数数据:
在矩阵的页面页脚中,选择显示参数的文本框。
删除文本框中的文本。
右键单击该文本框,然后选择“表达式”。
在“表达式”对话框中,将以下表达式粘贴到顶部框中:
=Join(Parameters!StoreID.Label, ", ")
此表达式将连接用户所选的所有商店名称,用逗号或空格隔开。
单击“确定”,以应用更改。
页面页脚中的文本框将更改为复杂表达式 <<Expr>>。
在页面页脚中,在文本框中选择,并使用句柄增加框的宽度。
在文本框中,将光标置于表达式的前面,并输入文本 Parameter Values Selected:。
选择标签文本 Parameter Values Selected: 并将粗体格式应用于文本。 你还可以使用键盘快捷键 Ctrl + F5。
检查报表,并测试对多值参数的支持:
选择“运行” 以预览报表。
在报表查看器工具栏上,在“商店名称”提示下,展开下拉列表。
列表中的每个参数值都有一个复选框。 当参数值包含在报表视图中时,复选框已选中。
在下拉列表中,选择“全选”选项。 此选项选中列表中的所有复选框,从而导致报表中显示所有参数值。
在“报表查看器”工具栏上,选择“查看报表”。 报表将显示所有商店销售的所有子类别的数量:
提示
对于长参数值,或包含许多列的宽报表,请在设计图面上增加报表宽度或列宽,以提高报表视图中数据的可读性。 还可调整列标题或单元格数据的格式,例如使用居中对齐方式,以可读格式换行。
在下拉列表中,取消选择“全选”选项,然后选择两个值:Contoso Catalog Store 和 Contoso Asia Online Store。
再次选择“查看报表”,以查看更新的结果。
为条件可见性添加布尔参数
在报表中实现布尔值(True 或 False)参数时,可根据当前设置控制参数数据的可见性。
按照以下步骤,将布尔参数添加到报表:
在“运行”选项卡上,选择“设计”以返回到设计视图。
在“报表数据”窗格中,右键单击“参数”节点,然后选择“添加参数”。
在“报表参数属性”对话框中,在“常规”选项卡上配置以下属性:
名称:输入“ShowSelections”。
提示:输入“Show selections?”。
数据类型:在下拉列表中选择“布尔”。
切换到“默认值”选项卡,并配置以下属性:
选择“指定值”选项,然后选择“添加”。
在值框中,输入 False。
单击确定以应用属性更改。
现在,可根据参数设置控制可见性:
在矩阵的页面页脚中,右键单击显示参数的文本框,然后选择“文本框属性”。
在“文本框属性”对话框,配置以下属性:
选择“可见性”选项卡。
选择“基于表达式显示或隐藏”选项。
选择“表达式”选项 (Fx)。
在“表达式”对话框中,将以下表达式粘贴到顶部框中:
=Not Parameters!ShowSelections.Value
文本框的“可见性”选项由“隐藏”属性控制。 当 Not (
!
) 运算符存在并且读者选择参数时,“隐藏” 属性为 False,文本框将显示参数数据。选择“确定”,以应用表达式。
再次选择“确定”以应用文本框属性。
检查报表,并测试对布尔参数的支持:
选择“运行” 以预览报表。
在“报表查看器”工具栏上,将“显示选择? 选项设置为 True。 选择“查看报表”。
当读者将“显示选择”设置为 True 时,“Parameter Values Selected”信息将在报表中显示。
添加报表标题
使用以下步骤向报表添加标题:
在报表生成器中,选择“设计”以返回设计视图。
在设计图面上,选择“单击以添加标题”文本框。
在“单击以添加标题”文本框中,输入文本“Parameterized Product Sales”,然后在文本框外进行选择。
保存报表
按照以下步骤在报表服务器上存储报表:
选择“文件>”“另存为”。
在“另存为报表”对话框中,选择右窗格中的“最近使用站点和服务器”。
选择或输入你拥有保存报表权限的 Report Server 的名称。
此时将显示“正在连接到报表服务器”消息。 连接完成后,默认报表文件夹将打开。 报表服务器管理员指定了默认文件夹位置。
对于报表“名称”,请将默认值“无标题”,替换为 Parameterized_Product_Sales。
选择“保存”。
报表即已保存至报表服务器。 连接的报表服务器的名称将显示在窗口底部的状态栏中。