第 3 课:添加在列表中选择多个值的参数
在本课中,您将 BusinessPersonID 和 DayoftheWeek 参数从单值参数更改为多值参数。多值参数允许您为报表参数选择多个值。若要修改报表参数 BusinessPersonID,请更改 AdventureWorks2008 数据集的查询,以便对所选值集(而不等于单个值)中的 @BusinessPersonID 进行测试,并检查该报表参数的多值属性。若要修改 DayoftheWeek 报表参数,需要检查多值属性、设置来自新数据集的可用值,并为默认值提供表达式。您将创建一个新数据集,为 DayoftheWeek 参数提供可用值。最后,您将向报表添加一个文本框,以便为选择的 DayoftheWeek 显示参数值。
替换现有数据集
在“报表数据”窗格中,右键单击数据集 AdventureWorksDataset,然后单击**“数据集属性”**。
在**“数据源”**中,确保已选中 AdventureWorks_Ref。
在**“查询类型”中,确保已选中“文本”**。
单击**“查询设计器”**按钮打开查询设计器。
用下列查询替换文本框中的文本:
SELECT soh.OrderDate AS [Date], DATENAME(weekday, soh.OrderDate) as Weekday, soh.SalesOrderNumber AS [Order], pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty, SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp INNER JOIN Sales.SalesOrderHeader AS soh ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID INNER JOIN Production.ProductSubcategory AS pps ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc ON ppc.ProductCategoryID = pps.ProductCategoryID GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name, soh.SalesPersonID HAVING ppc.Name = 'Clothing' AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate)) AND soh.SalesPersonID IN (@BusinessPersonID)
除将条件从等于更改为包含之外,该查询与以前的查询相同。
AND soh.SalesPersonID IN (@BusinessPersonID)
单击**“运行”(!**) 按钮。提示输入查询参数的值时,请使用下表来输入值。查询设计器不支持测试多值参数。
@StartDate
20010101
@EndDate
20030101
@BusinessPersonID
290
单击“确定”。
随即显示 BusinessPersonID = 290 的销售人员 Ranjit Varkey Chudukatil 的结果集。
编辑 BusinessPersonID 报表参数以接受多个值
在“报表数据”窗格中,展开**“参数”**,并双击 BusinessPersonID 参数。
选中**“允许多个值”**选项。
单击“确定”。
单击**“预览”**。报表将自动运行。BusinessPersonID 的下拉列表显示所有销售人员姓名。
注意 |
---|
系统将(“全选”)值用作多值参数可用值下拉列表中的第一个值。使用该复选框可以选中或清除所有值。默认情况下,会选中所有值。 |
添加新数据集以填充报表参数的有效值
切换到“设计”视图。
在“报表数据”窗格中,右键单击 AdventureWorks_Ref,然后单击**“添加数据集”。此时将打开“数据集属性”**对话框。
在**“名称”**字段中,键入 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。
在**“值字段”**下拉列表中,选择 Weekday。
在**“标签字段”**下拉列表中,选择 Weekday。
单击**“默认值”**。
选择**“指定值”**。
(可选)选择现有值 Friday,并单击**“删除”**。
单击**“添加”**。
在**“值”**中,键入 Saturday。
单击**“添加”**。
在**“值”**中,键入 Sunday。
单击“确定”。
在预览该报表之前,需要更改为表数据区域定义的筛选表达式以使用 IN 运算符,这是因为 DayoftheWeek 参数接受多个值。
更改筛选器以使用多值参数
在**“设计”视图中,右键单击表,然后单击“Tablix 属性”。此时将打开“Tablix 属性”**对话框。
单击**“筛选器”**。其中已包含一个在第 1 课中为 DaysoftheWeek 添加的筛选器。
在**“表达式”**的下拉列表中,确保值为 [Weekday]。
确保已选中**“文本”**。
将**“运算符”**由等号 (=) 更改为 In 运算符。
在**“值”**文本框的下拉列表中,确保值为 [@DayoftheWeek]。
单击“确定”。
现在设置表的筛选器,使其使用 In 运算符比较字段 Weekday 的值和参数 DayoftheWeek 的值。为报表参数选择多个值时,筛选器将测试表的每一行,以查看 Weekday 字段是否存在于 DayoftheWeek 集合中。
单击**“预览”**。该报表会显示默认值为 Saturday 和 Sunday 的报表参数 DaysoftheWeek。使用下拉列表为 DayoftheWeek 参数选择多个值。
后续步骤
您已成功地将报表参数属性从单值更改为多值。并已对查询、筛选器和表达式做出必要的更改,以便能够使用多值参数集合。您还学习了在表达式中使用多值参数。在下一课中,您将学习如何创建根据前面参数的选定值有条件地填充其值的参数。请参阅第 4 课:添加级联参数。