2011年12月13日 星期二

Reporting Service - 如何建立資料驅動訂閱

        報表訂閱的部份,相信大家都已經相當的清楚了,就是將報表透過E-Mail或共享檔案的方式進行,主動的將報表傳送給使用者,但是如果每一個使用者的條件不同時,如A使用者想要直接收到 PDF 的格式,B使用者想要收到 Excel 的格式時,以往只能透過不同的訂閱群組進行,但是在管理上卻又非常的麻煩。

        當然這個問題有許多的方法可以解決,如自行透過程式設計的等方式進行,但是這些方法都需要額外的花費時間進行設計才可以完成,所以微軟提出 [資料驅動訂閱] 可以很簡單的解決這個問題,可以透過資料表的對應,來完成每一位使用者不同的需求,所以本篇就來介紹如何進行 Reporting Serv資料驅動訂閱。

        在此篇的範例上,我透過 Northwind (北風資料庫) 建立了一個查詢,然後將此查詢透過報表精靈設計成一張報表後,再將報表上傳到 Reporting Service 之中,最後再透過資料驅動訂閱的方式進行。

PS:資料驅動訂閱只有 Evaluation、Developer 和 Enterprise 三個版本有支援,其他的版本皆無法使用。

設定步驟:
1、啟動SQL Server Agent,由於報表的訂閱都是透過 SQL Server Agent來進行的,所以請記得先啟動此服務。

2、設計報表,並將報表上傳到 Reporting Service 之中。

報表查詢語法:這表報表在預覽時會讓前端的使用者選擇員工的名稱,所以在查詢語法中,透過 @emp_id 進行動態的設定。

SELECT Orders.OrderID, Orders.OrderDate, Employees.EmployeeName,
       Customers.CompanyName, Products.ProductName,
       OrderDetails.UnitPrice, OrderDetails.Quantity,
       OrderDetails.Discount
FROM Orders INNER JOIN
     Employees ON Orders.EmployeeID = Employees.EmployeeID
INNER JOIN
     Customers ON Orders.CustomerID = Customers.CustomerID
INNER JOIN
     OrderDetails ON Orders.OrderID = OrderDetails.OrderID
INNER JOIN
     Products ON OrderDetails.ProductID = Products.ProductID
WHERE Employees.EmployeeID = @emp_id
ORDER BY Orders.OrderDate


報表預覽

3、確認在 Reporting Services Configuration Manager 之中已有設定 E-Mail Settings,如果你此時沒有SMTP主機可以進行測試時,你可以參考我的另一篇文篇 [如何設定Reporting Service與本地SMTP服務的應用] 進行設定。

4、登入Reporting Service 的網頁管理介面,點選報表切換到管理 -> 訂閱 -> 新增資料導向訂閱 ,如果此時出現下列的錯誤時,主要是由於報表進行訂閱時,都需要自訂資料來源,無法透過共用資料來源來進行,所以請接續下一個動作。

5、選擇要訂閱的報表切換到管理 -> 資料來源 -> 點選自訂資料來源

5-1 在連接字串的部份,輸入下列的文字。
data source=server address; initial catalog=Northwind
5-2 在 [使用下列方式連接] 上,選擇 [安全地儲存在報表伺服器中的認證],此時請輸入一組可以連接到資料庫的帳號與密碼,並且勾選 [連接到資料來源時作為Windows 認證]。
5-3 點選 [測試連接],確認連線的帳號與密碼是正確的。
5-4 最後點選 [套用] 進行儲存。


6、選擇要訂閱的報表切換到管理 -> 訂閱 -> 新增資料導向訂閱,在 [描述] 的地方請輸入此訂閱的名稱,然後在 [指定通知收件者的方式] 選擇 [電子郵件],在此選單中,如果沒有 [電子郵件] 可以選擇,代表你沒有設定第三個步驟,選完後,再點選 [下一步]。

7、此處需再次輸入訂閱的資訊,請比照第五步驟的資訊再次設定即可。

8、訂閱上由於我要顯示針對每一個員工有不同的寄件方式,所以我在 [Employees] 的資料表上增加了兩個欄位,一個是 [Email],另一個是 [ExportFormat] 的欄位,分別記錄員工的E-Mail與匯出的格式,另外希望匯出的同時,也同時副件寄給主管。

查詢語法:
SELECT Employees.EmployeeID, Employees.ExportFormat,
       Employees.Email, Employees_1.Email AS mag_email
FROM Employees LEFT OUTER JOIN
     Employees AS Employees_1 ON
     Employees.ManagerID = Employees_1.EmployeeID


9、將上述的語法貼到訂閱的步驟3的地方,然後點選驗證進行確認。

10、步驟4主要就是最關鍵的部份,由於資料驅動訂閱主要透過這個步驟與你的查詢語法產生連結,根據我的需求,有幾個部份需要進行設定:

10-1 收件者 -> 請選擇 [從資料庫取值],然後選擇 [Email] 欄位。
10-2 副本 -> 請選擇 [從資料庫取值],然後選擇 [mag_email] 欄位。

10-3 轉譯格式 -> 請選擇 [從資料庫取值],然後選擇 [ExportFormat] 欄位。
10-4 註解 -> 請選擇 [從資料庫取值],然後選擇 [EmployeeID] 欄位。
10-5 點選下一步

11、在這個步驟主要針對你的報表中的參數要與查詢語法的那一個欄位進行結合,在這裡請選擇 [EmployeeID] 的欄位。

12、選擇訂閱的處理方式,在這裡由於我們需要在每天的固定時間傳送報表,所以請選擇 [在為此訂閱建立的排程上],然後選擇 [下一步] 。

13、排程的時間可以自由設定,在這我是希望每天 01:00 進行訂閱的排程,設定如下。

14、完成設定後,在報表的訂閱就可以看到如下的訂閱項目。

15、當收到E-Mail時,你就可以看到如下的格式,紅色圈起來的部份代表著 10-4 選擇的註解,另外如果你希望將報表的內容呈現在 E-Mail之中時,在輸出格式要選擇 [MHTML] ,也就是在 10-3 步驟中的欄位。


16、另一個範例,你可以看到副本也會自動轉寄給主管,然後透過附件的方式進行輸出,但是在 E-Mail的內文中,你就不會看到詳細的內容,但是可以透過連結的方式直接連到 Reporting Service 的主機進行觀看。

以上是Reporting Service資料驅動訂閱的詳細建立步驟,程序上有點多,但是透過圖文並茂的方式,相信對大家在理解會有一定的幫助,也請希望大家多多利用這個功能。

Reporting Service 匯出格式參考(詳細說明請參考連結):
  1. XML
  2. CSV
  3. ATOM
  4. PDF
  5. RGDI
  6. HTML4.0
  7. MHTML
  8. EXCEL
  9. RPL
  10. IMAGE
  11. WORD

參考連結:
資料驅動訂閱
http://msdn.microsoft.com/zh-tw/library/ms159150(v=SQL.105).aspx
教學課程:建立資料驅動訂閱
http://msdn.microsoft.com/zh-tw/library/ms169673(v=SQL.105).aspx
Exporting Reports
http://msdn.microsoft.com/en-us/library/dd239307.aspx

關鍵字:Reporting ServiceData-Driver Subscription資料導向訂閱

沒有留言:

張貼留言