第 3 課:加入參數以選取清單中的多個值 (SSRS)
在這一課,您會將 BusinessPersonID 和 DayoftheWeek 參數從單一值參數變更為多重值參數。多重值參數可讓您為報表參數選取多個值。若要修改報表參數 BusinessPersonID,您將變更 AdventureWorks2008R22008 資料集的查詢,以針對所選值集合中的 @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
1/1/2001
@EndDate
1/1/2003
@BusinessPersonID
290
按一下 [確定]。
結果集顯示銷售人員 Ranjit Varkey Chudukatil 的 BusinessPersonID = 290。
編輯 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 參數的值。選擇報表參數的多個值時,篩選會測試資料表的各個資料列,查看 DayoftheWeek 集合中的 Weekday 欄位是否存在。
按一下 [預覽]。報表會顯示報表參數 DaysoftheWeek,其中具有預設值星期六和星期日。使用下拉式清單選取 DayoftheWeek 參數的多個值。
後續步驟
您已順利將報表參數屬性從單一值變更為多重值。您已在查詢、篩選和運算式中進行必要的變更,以配合使用多重值參數集合。您已學習到如何在運算式中使用多重值參數。在下一課,您將學到如何建立根據先前參數選取之值,有條件地擴展其值的參數。請參閱<第 4 課:加入串聯參數 (SSRS)>。