第 3 课:添加在列表中选择多个值的参数 (Report Builder 2.0)
在本课中,您将了解如何更改参数以接受多个值。这些参数称为多值参数。默认情况下,一个参数接受一个值。上一课创建的参数 BusinessPersonID 和 DayoftheWeek 均接受一个值。若要修改某个参数以接受多个值,您必须知道该参数是否是通过查询参数自动创建的,例如 BusinessPersonID;或者是否是使用“报表数据”窗格手动创建的,例如 DayoftheWeek。
若要修改报表参数以接受多个值,您只需设置报表参数属性。如果报表参数基于查询参数,则还必须更改查询。如果在筛选器中使用该参数,则必须更改 Filter 运算符来指定一组值而非单个值。
替换现有数据集
在“报表数据”窗格中,右键单击数据集 DataSet1,然后单击**“查询”**。
将打开基于文本的查询设计器。
用下列查询替换文本框中的文本:
SELECT SH.OrderDate ,DATENAME(weekday, SH.OrderDate) as Weekday ,SH.SalesOrderNumber ,SD.OrderQty ,SD.LineTotal ,P.Name AS [Product] ,PS.Name AS [Subcategory] FROM Sales.SalesPerson SP INNER JOIN Sales.SalesOrderHeader AS SH ON SP.BusinessEntityID = SH.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS SD ON SH.SalesOrderID = SD.SalesOrderID INNER JOIN Production.Product AS P ON SD.ProductID = P.ProductID INNER JOIN Production.ProductSubcategory AS PS ON PS.ProductSubcategoryID = P.ProductSubcategoryID INNER JOIN Production.ProductCategory AS PC ON PC.ProductCategoryID = PS.ProductCategoryID WHERE PC.Name = 'Clothing' AND (SH.OrderDate BETWEEN (@StartDate) AND (@EndDate)) AND SH.SalesPersonID IN (@BusinessPersonID)
除条件已从等于 = 更改为包含 IN 之外,该查询与以前的查询相同:
AND SH.SalesPersonID IN (@BusinessPersonID)
单击**“运行”(!**) 按钮。提示输入查询参数的值时,请使用下表来输入值。查询设计器不支持测试多值参数。
@StartDate
20010101
@EndDate
20030101
@BusinessPersonID
290
单击“确定”。
随即显示 BusinessPersonID = 290 的销售人员 Ranjit Varkey Chudukatil 的结果集。
编辑 BusinessPersonID 报表参数以接受多个值
在“报表数据”窗格中,展开**“参数”**,并双击 BusinessPersonID 参数。
选中**“允许多个值”**选项。
单击“确定”。
单击**“预览”**。报表将自动运行。BusinessPersonID 的下拉列表显示所有销售人员姓名。
注意 |
---|
系统将(“全选”)值用作多值参数可用值下拉列表中的第一个值。使用该复选框可以选中或清除所有值。 |
添加新数据集以填充报表参数的有效值
切换到“设计”视图。
在“报表数据”窗格工具栏中,单击**“新建”,然后单击“数据集”。此时将打开“数据集属性”**对话框。
在**“名称”**中,键入 WeekDaysfromQuery。
在**“查询类型”中,确保选择的是“文本”**。
单击**“查询设计器”,然后单击“编辑为文本”**。
在“查询”窗格中,粘贴以下查询:
SET DATEFIRST 1; SELECT DISTINCT DATEPART(weekday, S.OrderDate) as WeekdayNumber, DATENAME(weekday, S.OrderDate) as Weekday FROM Sales.SalesOrderHeader S Order by WeekdayNumber
单击查询设计器工具栏上的**“运行”(!**) 按钮。结果集将显示序号及每周的工作日。
单击两次**“确定”退出“数据集属性”**对话框。
数据集 WeekDaysfromQuery 将显示在“报表数据”窗格中。
编辑参数以接受多个值、默认值和有效值
在“报表数据”窗格中,展开**“参数”,并双击 DayoftheWeek。此时将打开“报表参数属性”**对话框。
选择**“允许多个值”**。
单击**“可用值”**。
选择**“从查询中获取值”**。
在**“数据集”**下拉列表中,选择 WeekDaysfromQuery。
在**“值字段”**下拉列表中,选择 WeekdayNumber。
在**“标签字段”**下拉列表中,选择 Weekday。
用户选择参数值时,他们是从标签中进行选择,但报表使用的是其值。当设置默认值或筛选器时,这一点非常重要。该值必须是 WeekdayNumber 字段的整数值。
单击**“默认值”**。
选择**“指定值”**。
单击**“添加”**。
在**“值”**中,将 Friday 替换为 6。因为值来自提供工作日数字和工作日名称的数据集,所以默认值必须指定工作日数字。值 6 表示 Saturday。
单击**“添加”**。
在**“值”**中,键入 7。此值表示 Sunday。
单击“确定”。
在可以预览报表之前,必须为表更改筛选器表达式以使用 IN 运算符,因为 DayoftheWeek 参数接受多个值。
更改筛选器以使用多值参数
在“报表数据”窗格中,右键单击 DataSet1,然后单击**“数据集属性”**。
单击**“筛选器”**。其中已包含一个在第 1 课中为 DayoftheWeek 添加的筛选器。
在**“表达式”**的下拉列表中,确保值为 [Weekday]。
将**“运算符”**由等号 (=) 更改为 In。
在**“值”**中,键入 [@DayoftheWeek.Label]。
指定参数标签以便工作日的名称与标签字段相比较,而非与工作日的数值字段相比较。
单击“确定”。
现在设置表的筛选器,使其使用 In 运算符比较字段 Weekday 的值和参数 DayoftheWeek 的标签。为报表参数选择多个值时,筛选器将测试表的每一行,以查看 Weekday 字段是否存在于 DayoftheWeek 集合中。
单击**“运行”**以预览报表。该报表会显示默认值为 Saturday 和 Sunday 的报表参数 DaysoftheWeek,这些默认值是您指定的默认值的标签。使用下拉列表为 DayoftheWeek 参数选择多个值。
后续步骤
您已成功地将报表参数属性从单值更改为多值。而且已对查询、筛选器和表达式做出必要的更改,以使用多值参数集合。您还学习了在表达式中使用多值参数。在下一课中,您将学习如何创建根据前面参数的选定值有条件地填充其值的参数。请参阅第 4 课:添加级联参数 (Report Builder 2.0)。