共用方式為


第 1 課:加入參數,依日期篩選報表 (報表產生器 2.0)

在報表的查詢中加入開始和結束日期的參數之後,您就可以指定日期範圍,限制從資料來源擷取的資料。您也可以建立其他參數,用來篩選從資料來源擷取後的資料。

在這一課,您會將參數 @StartDate@EndDate 加入到查詢中,以限制從資料來源擷取的資料。此時系統會自動為您建立兩個報表參數 StartDate 和 EndDate,並顯示在 [報表資料] 窗格中。參數需要區分大小寫。在 Transact-SQL 中,查詢參數開頭為 @ 符號,而顯示在 [報表資料] 窗格中的報表參數則不是。

您會將參數的資料類型設定為 DateTime,並且會看到日曆控制項與參數文字方塊一起出現在報表檢視器工具列上。您將為參數設定預設值,讓報表能夠自動執行。最後,您會建立未繫結至查詢參數的報表參數 DayofWeek,並用它來篩選從資料來源擷取資料後的資料。

本教學課程需要您先完成<教學課程:建立基本資料表報表 (報表產生器 2.0)>。

若要開啟現有的報表

  1. 按一下 [開始]、依序指向 [程式集][Microsoft SQL Server 2008 報表產生器],然後按一下 [報表產生器 2.0]

  2. 在報表產生器的按鈕中,按一下 [開啟]

  3. 導覽至銷售訂單。這是在<教學課程:建立基本資料表報表 (報表產生器 2.0)>中建立的報表。

  4. 按一下 [開啟]。報表定義就會以 [設計] 檢視開啟。

    下一步,您會將資料集查詢取代成包含查詢參數的查詢。

若要取代現有的資料集查詢

  1. 在 [報表資料] 窗格中,以滑鼠右鍵按一下 DataSet1 資料集,然後按一下 [查詢]。查詢設計工具隨即開啟。

  2. 在查詢窗格中,以下列查詢取代文字:

    SELECT
      SH.OrderDate
      ,SH.SalesOrderNumber
      ,SD.OrderQty
      ,SD.LineTotal
      ,P.Name AS [Product]
      ,PS.Name AS [Subcategory]
    FROM
      Sales.SalesOrderHeader AS SH
      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.OnlineOrderFlag = 0
       AND (SH.OrderDate BETWEEN (@StartDate) AND (@EndDate))
    

    除了 ORDER BY 排序子句已經被移除而且加入一個包含兩個限制參數的條件之外,這與之前的查詢相同:

    AND (SH.OrderDate BETWEEN (@StartDate) AND (@EndDate))

  3. 按一下工具列上的 [執行] (!)。[定義查詢參數] 對話方塊便會開啟,並且提示您輸入每個參數的值。

  4. 提供兩個值以查看篩選過的結果集:

    1. [參數值] 資料行中,輸入 @StartDate, 的值,例如,20010101。

    2. [參數值] 資料行中,輸入 @EndDate 的值,例如,20030101。

  5. 按一下 [確定]。 

    結果集會針對 2001 年和 2002 年的訂單,顯示含有值的資料集。

  6. 按一下 [確定]。 

    在 [報表資料] 窗格中,展開 [參數] 節點來檢視根據查詢參數自動建立的兩個報表參數:StartDate 和 EndDate。

    定義代表日期或時間的查詢參數之後,您必須變更報表參數的資料類型才能符合。

若要變更報表參數的資料類型和預設值

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

  2. 確認參數的名稱為 StartDate 而提示為開始日期。

  3. [資料類型] 中,選取 [日期/時間]。這樣就會設定儲存在報表定義中的報表參數資料類型。

  4. 按一下 [確定]。

  5. 在 [報表資料] 窗格中,按兩下 EndDate。請確認名稱和提示值。

  6. [資料類型] 中,選取 [日期/時間]

  7. 按一下 [確定]。 

  8. 按一下 [執行] 預覽報表。StartDate 和 EndDate 參數分別會與日曆控制項一起出現在報表工具列上。當參數的資料類型設為 Date/Time,而且您尚未定義可用的值清單時,日曆控制項會自動出現。如果您定義可用的值清單,則會出現值的下拉式清單。

  9. 提供兩個參數值來執行報表。您可以使用日曆控制項,也可以輸入下列日期:

    1. [StartDate] 參數文字方塊中,輸入 2001-01-01。

    2. [EndDate] 參數文字方塊中,輸入 2003-01-01。

  10. 按一下 [檢視報表]。報表只會顯示報表參數值之內的資料。

    建立報表的報表參數之後,就可以加入這些參數的預設值。預設參數可讓報表自動執行,否則,使用者就必須輸入參數值來執行報表。

若要設定參數的預設值

  1. 切換至 [設計] 檢視。

  2. 在 [報表資料] 窗格中,展開 [參數],然後按兩下 StartDate。[報表參數屬性] 對話方塊隨即開啟。

  3. 按一下 [預設值]

  4. 選取 [指定值] 選項。[加入] 按鈕和空白的 [值] 方格隨即出現。

  5. 按一下 [加入]。空白資料列會加入至方格中。

  6. [值] 文字方塊中,取代預設文字 (Null) 並且輸入 2001-01-01。

  7. 按一下 [確定]。 

  8. 在 [報表設計] 窗格中,按兩下 EndDate。

  9. 按一下 [預設值]

  10. 選取 [指定值] 選項。

  11. 按一下 [加入]

  12. 輸入 2003-01-01。

  13. 按一下 [確定]。

  14. 按一下 [預覽]。報表會立即執行,因為每個參數都具有預設值。

若要在查詢中加入新欄位,以用於篩選

  1. 切換至 [設計] 檢視。

  2. 以滑鼠右鍵按一下 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.SalesOrderHeader AS SH
      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.OnlineOrderFlag = 0
       AND (SH.OrderDate BETWEEN (@StartDate) AND (@EndDate))
    

    在查詢中,透過在 SELECT 陳述中加入下列命令,即可定義其他導出資料行做為一週中產生銷售的一天:

    ,DATENAME(weekday, soh.OrderDate) as Weekday.

  3. 按一下 [執行] (!)。[定義查詢參數] 對話方塊隨即開啟。

  4. [參數值] 資料行中,輸入 @StartDate, 的值,例如,20010101。

  5. [參數值] 資料行中,輸入 @EndDate 的值,例如,20030101。

  6. 按一下 [確定]。 您應該會在標示為 Weekday 的結果集中,看到新的資料行。

  7. 按兩次 [確定]。[報表資料] 窗格中,確認 Weekday 是一個欄位。

    既然資料表具有可識別當週日期的資料,您可以加入篩選,只讓特定當週日期的銷售資料用於報表中。若要協助確認這點,您可以顯示具有銷售訂單日期的當週日期。

若要格式化資料表中的日期

  1. 切換至 [設計] 檢視。

  2. 按一下含有 OrderDate 欄位運算式的資料格。在 [主資料夾] 索引標籤的 [數值] 群組中,按一下對話方塊啟動器。

  3. [類別目錄] 中,確認已選取 [日期]

  4. [類型] 方塊中,選取顯示當週日期的日期類型。例如,若為英文 (美國) 的地區設定,您就可以選取 [Monday, January 31, 2000]。

  5. 按一下 [確定]。

  6. 按一下 [執行] 預覽報表。資料表第一個資料行中的日期會顯示當週日期以及日曆日期。

    下一步,您會加入參數,以便讓使用者依據當週日期篩選。

若要加入新的報表參數

  1. 切換至 [設計] 檢視。

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

  3. 在 [名稱] 中,輸入 DayoftheWeek。

  4. [提示] 中,輸入篩選每週的星期幾:。

  5. 確認資料類型是 Text。

  6. 按一下 [預設值]

  7. 選取 [指定值] 選項。[加入] 按鈕和空白的 [值] 方格隨即出現。

  8. 按一下 [加入]

  9. 輸入 Friday。

  10. 按一下 [確定]。 

    下一步,您會加入篩選,以便僅顯示針對 DayoftheWeek 參數所選擇的值。您可以將篩選加入至資料表或資料集。這份報表同時具有顯示相同資料的資料表和圖表。如果您只想要在資料表中顯示篩選過的資料,請將篩選加入至資料表。如果您想要讓資料表和圖表都顯示篩選過的資料,請將篩選加入至資料集。在下列程序中,您將設定資料集的篩選。

若要使用參數運算式來設定資料集篩選

  1. 在 [設計] 檢視的 [報表資料] 窗格中,以滑鼠右鍵按一下 DataSet1,然後按一下 [資料集屬性]

  2. 按一下 [篩選]

  3. 按一下 [加入]。空白資料列會加入至方格中。

  4. [運算式] 中,從下拉式清單選取 [Weekday]。

  5. 確認 [運算子] 會顯示等號 (=)。

  6. 按一下 [值] 文字方塊旁邊的運算式 (fx) 按鈕。[運算式] 對話方塊隨即開啟。

  7. 在 [類別目錄] 中,按一下 [參數]。目前的參數清單隨即出現在 [值] 窗格中。按兩下 [DayoftheWeek]。參數運算式隨即加入到運算式文字方塊中。下列運算式現在會出現在運算式文字方塊中:=Parameters!DayoftheWeek.Value。

  8. 按一下 [確定]。 

    [值] 會針對 DayoftheWeek 參數顯示簡單運算式:[@DayoftheWeek]。

  9. 按一下 [確定]。 

    資料集的篩選現在設定為比較 Weekday 欄位的值與 DayoftheWeek 的參數值。例如,在報表工具列中,輸入 Friday 做為 DayoftheWeek 的值時,報表處理器將只會處理資料表中 Weekday 欄位值為 Friday 的資料列。

    按一下 [預覽]。由於所有參數都有預設值,因此,報表會自動執行。資料表和圖表只顯示介於 StartDate 和 EndDate 所定義日期範圍內以及落在星期五的值。在這個資料集中,只有三個日期落在星期五:

    • February 1, 2002

    • March 1, 2002

    • November 1, 2002

後續步驟

您已順利定義查詢參數和報表參數、設定參數的預設值,並在資料集上設定篩選。在下一課,您將學習如何為參數建立可用值 (或稱為有效值) 清單。請參閱<第 2 課:加入參數以建立可用值的清單 (報表產生器 2.0)>。

請參閱

其他資源