Reporting Services的查詢參數與報表參數的用法簡介

Reporting Services的查詢參數與報表參數的用法簡介

當我們在Report Builder或Report Designer(以下以Report Designer為例,Report Builder做法均相同)中使用具有參數的T-SQL敘述或預存程序來建立資料集時,Report Designer會自動建立報表參數,並將之對應至查詢參數。

image

  • 以下程式碼為本文所使用的預存程序:
       1:  CREATE PROCEDURE usp_GetCustomersOrderByCountry
       2:      @Country        nvarchar(15)
       3:  AS
       4:  SELECT c.CustomerId,c.CompanyName,c.Country,c.City,SUM(od.UnitPrice * od.Quantity) AS Amount
       5:  FROM Customers c
       6:  INNER JOIN Orders o
       7:  ON o.CustomerId = c.CustomerId
       8:  INNER JOIN [Order Details] od
       9:  ON o.OrderID = od.OrderID
      10:  WHERE c.Country = @Country
      11:  GROUP BY c.CustomerId,c.CompanyName,c.Country,c.City
  • 根據預設查詢參數會對應至相同名稱的報表參數,如下圖紅色1所標示為查詢參數,也就是上述預存程序的@Country輸入參數;紅色2所標示為報表參數。

image

  • 在報表資料視窗中的參數為報表參數(如下圖左),雙擊報表後會開啟報表參數屬性視窗(如下圖右),用來針對報表參數進行各項細部設定。

imageimage

【如何使用報表參數與查詢參數】

報表參數是用來控制報表(.rdl或.rdlc )執行時所需的參數,預設為可見且不允許NULL及空值,因此在Render報表時必須指定報表參數才行,下圖左為未指定報表參數時檢視報表所發生的錯誤提示。而查詢參數是資料集中T-SQL或預存程序存取SQL Server時所需要的參數,即是T-SQL語法中所宣告的變數,像是上述程式碼的第2及第10列的@Country。

image

假設我們再建立一個資料集,這次改用T-SQL敘述來產生所需上述預存程序所需的國家選項,並故意把查詢參數設定為和上述預存程序相同,程式碼如下:

   1:  SELECT DISTINCT Country
   2:  FROM Customers
   3:  WHERE Country = @Country OR @Country = ''

按下確定之後發現Report Designer因為兩個資料集的查詢參數都是@Country,因此不會再增加一個報表參數。

image

這樣的結果不是筆者所要的,筆者希望先以CountryDataSet來找出所有Country,將之用來讓NWDataSet查詢個別國家的銷售總額,為達到這個目的,作法如下:

  1. 設定報表參數 (@Country)的可用的值為CountryDataSet。

    image
  2. 建立另一報表參數。從報表資料>新增>參數

    image
  3. 於報表參數屬性視窗中輸入名稱為CountryFromDataSet,提示為CountryFromDataSet,且勾選允許空白值。 點選預設值頁籤後選擇指定值,並於下方輸入【=String.Empty】。

    image image
  4. 雙擊報表資料中的CountryDataSet,開啟資料集屬性視窗,切換至參數標籤將查詢參數@Coutry所對應的報表參數改為@CountryFromDataSet。

    imageimage
  5. 預覽報表時出現下列的錯誤訊息。

    image

    
    錯誤    2    [rsInvalidReportParameterDependency]  報表參數‘Country’有與報表參數 “CountryFromDataSet” 相依的 DefaultValue 或 ValidValue。向前相依性無效。    D:\Visual Studio 2008\Projects\MarketReport\MarketReport\Report1.rdl    0    0    
    
  6. 因為報表參數有順序性,必須產生於報表資料中點選CountryFromDataSet後按向上鍵,把CountryFromDataSet調到第一個執行順序。

    imageimage
  7. 從工具箱拉一個資料表至報表主體,並設定如下圖的樣子。

    image
  8. 預覽報表確認Country確實可以選擇(下圖左)並產生如下圖右的結果。

    imageimage

【參考資料】

將參數加入至您的報表