共用方式為


第 2 課:加入參數以建立可用值的清單 (SSRS)

可用值 (或有效值) 提供使用者一份報表參數的可能值清單。身為報表作者,您可以從特別設計來擷取資料來源中一組值的查詢提供有效值,也可以提供一組預先定義的值。透過將一組可用的值繫結至報表處理時所執行的資料集查詢,您就可以確保從下拉式清單只能選擇資料庫中現有的值。

在本課中,您將修改「銷售訂單」報表,以便從 SQL Server AdventureWorks2008R2 資料庫提供一份可用銷售人員名稱的下拉式清單。您將設定資料表屬性,在所選取參數值的結果集中沒有資料列時顯示訊息。當您選擇姓名並檢視報表時,報表只會顯示該銷售人員的銷售額。

取代現有的資料集

  1. 在 [報表資料] 窗格中,以滑鼠右鍵按一下 AdventureWorksDataset 資料集,然後按一下 [資料集屬性]

    [!附註]

    如果您看不到 [報表資料] 窗格,請按一下 [檢視] 功能表上的 [報表資料]

  2. [資料來源] 中,確認已選取 [AdventureWorks_Ref]。

  3. [查詢類型] 中,確認 [文字] 已選取。

  4. 按一下 [查詢設計工具] 按鈕來開啟查詢設計工具。

  5. 以下列查詢取代文字方塊中的文字:

    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 = (@BusinessPersonID)
    

    除了加入將結果值限制為一個銷售人員的條件之外,這與之前的查詢相同。

    AND soh.SalesPersonID = (@BusinessPersonID)

  6. 按一下 [執行] (!) 按鈕。提示輸入查詢參數時,請使用下表來輸入值。

    @StartDate

    1/31/2001

    @EndDate

    1/31/2003

    @BusinessPersonID

    290

  7. 按一下 [確定]。 結果集顯示銷售人員 Ranjit Varkey Chudukatil 的 SalesPersonID = 290。 

擴展報表參數的有效值清單

  1. 在 [報表資料] 窗格中,按一下 [新增],然後按一下 [資料集][資料集屬性] 對話方塊隨即開啟。

  2. [名稱] 欄位中,輸入 BusinessPersons。此資料集將用於擴展 SalesPersonID 報表參數的有效值清單。

  3. 確認資料來源為 AdventureWorks_Ref。

  4. 將下列 Transact-SQL 查詢貼入查詢窗格中:

    SELECT SP.BusinessEntityID, C.FirstName, C.LastName
    FROM   Sales.SalesPerson AS SP INNER JOIN
         HumanResources.Employee AS E ON E.BusinessEntityID = SP.BusinessEntityID INNER JOIN
         Person.Person AS C ON C.BusinessEntityID = E.BusinessEntityID
    ORDER BY SP.BusinessEntityID
    

    按兩次 [確定]。BusinessPersons 資料集會擴展欄位的清單。此資料集將用於提供 BusinessPersonID 參數的有效值。

  5. 您將會注意到 BusinessPersons 資料集擁有稱為 FirstName 和 LastName 的欄位。下一步,我們會將這些欄位串連到一個稱為 Name 的欄位。

若要在報表資料窗格中定義導出欄位

  1. 在 [報表資料] 窗格的工具列中,以滑鼠右鍵按一下 BusinessPersons 資料集,然後按一下 [加入導出欄位][資料集屬性] 對話方塊的 [欄位] 頁面會開啟,並在方格中加入一個新的資料列。

  2. 在最後一個 [欄位名稱] 文字方塊中,輸入 Name。

  3. [欄位來源] 文字方塊中,貼上下列運算式:

    =Fields!LastName.Value & ", " & Fields!FirstName.Value

  4. 按一下 [確定]。

  5. 在 [報表資料] 窗格的 BusinessPersons 資料集下,新的 Name 欄位會出現在資料集的欄位集合中。

若要利用可用值的清單擴展報表參數

  1. 在 [報表資料] 窗格中,展開 [參數] 節點,並以滑鼠右鍵按一下 BusinessPersonID,然後按一下 [參數屬性]

  2. [提示] 中,輸入 Select business person:。

  3. [資料類型] 中選取 [整數]

  4. 按一下 [可用的值]

  5. 選取 [從查詢取得值] 選項。

  6. [資料集] 下拉式清單中,選取 [BusinessPersons]

  7. [值欄位] 下拉式清單中,選取 [BusinessEntityID]

  8. [標籤欄位] 下拉式清單中,選取 [Name]

    透過選取標籤的名稱,BusinessEntityID 參數的有效值下拉式清單現在將會顯示每個銷售人員的姓名,而不是銷售人員編號。

  9. 按一下 [預設值]

  10. 選取 [從查詢取得值] 選項。

  11. [資料集] 下拉式清單中,選取 [BusinessPersons]

  12. [值欄位] 下拉式清單中,選取 [BusinessEntityID]

  13. 按一下 [確定]。 

  14. 按一下 [預覽] 索引標籤。報表會顯示包含商務人員姓名的下拉式清單。

  15. 按一下 [檢視報表]。選取其他參數值以檢視結果。

後續步驟

您已順利在現有的報表中加入參數的可用值清單。下一步,您會將 DayoftheWeek 和 SalesPersonID 參數修改成多重值。請參閱<第 3 課:加入參數以選取清單中的多個值 (SSRS)>。