簡體   English   中英

數據驅動訂閱 SSRS 標准版 2008

[英]Data Driven Subscriptions SSRS Standard Edition 2008

我對 MSSQL 和 SSRS 還很陌生。

我正在嘗試在執行以下操作的 MSSQL 2008 標准 SSRS 中創建數據驅動訂閱。

將報告結果通過電子郵件發送到報告中找到的電子郵件地址。 每天跑步

例如:

Select full_name, email_address from users where (full_name = 'Mark Price')

這將使用 email_address 列來確定向誰發送電子郵件,這也必須適用於具有多個電子郵件地址的多個結果。

我正在考慮這樣做的方式是訂閱運行查詢,如果沒有找到結果,那么什么也不會發生。 但是,如果找到結果,則報告會更改訂閱表中的行,以在下一分鍾左右再次運行報告,並在結果中找到正確的電子郵件信息。 這是一個愚蠢的想法嗎?

我發現了幾篇博文聲稱這是有效的,但我無法理解他們的代碼,無法知道它的作用。

那么,關於如何解決這個問題的任何建議,或者您是否可以建議一些已經在互聯網上提供的簡短描述?

我已經在 SQL Server Standard 上實現了這樣的東西,以避免為 Enterprise 付費。 首先,我構建了一個名為“Schedule a DDR”(數據驅動報告)的報告。 該報告具有以下參數:

要計划的報告:滿足數據測試時要觸發的 SSRS 報告(包括文件夾)的名稱。 例如“/Accounting/Report1”。

參數集:將用於查找要在報告中使用的參數的字符串。 例如“ABC”。

檢查是否應運行報告的查詢:將返回單個值(零或非零)的 SQL 查詢。 零將被解釋為“不運行此報告”

電子郵件收件人:以分號分隔的電子郵件收件人列表,這些收件人將收到報告(如果運行)。

請注意,“安排 DDR”報告是我們在此處實際運行的報告,它會將其輸出發送給我; 它的作用是運行另一個報告——在本例中它是“/Accounting/Report1”,它是需要這些電子郵件地址的報告。 因此,“計划 DDR”並不是真正的報告,盡管它是按計划進行並運行的——它是一個構建和運行報告的小工具。

我在 SQL 中還有一個表定義如下:

CREATE TABLE [dbo].[ParameterSet](
            [ID] [varchar](50) NULL,
            [ParameterName] [varchar](50) NULL,
            [Value] [varchar](2000) NULL
) ON [PRIMARY]

每個參數集——在本例中為“ABC”——在表中都有一組記錄。 在這種情況下,記錄可能是 ABC/placecode/AA 和 ABC/year/2013,這意味着 ABC 中有兩個參數:placecode 和 year,它們的值分別為“AA”和“2013”​​。

SSRS 中“安排 DDR”報告的數據集是

DDR.dbo.DDR3 @reportName, @parameterSet, @nonZeroQuery, @toEmail;

DDR3 是一個存儲過程:

CREATE PROCEDURE [dbo].[DDR3] 
   @reportName            nvarchar(200),
   @parameterSet   nvarchar(200),
   @nonZeroQuery   nvarchar(2000),
   @toEmail        nvarchar(2000)
AS
BEGIN
   -- SET NOCOUNT ON added to prevent extra result sets from
   -- interfering with SELECT statements.
   SET NOCOUNT ON;

   select ddr.dbo.RunADDR(@reportName,@parameterSet,@nonZeroQuery,@toEmail) as DDRresult;

   END

RunADDR 是一個 CLR。 這是它如何工作的概述; 如果有人需要,我可以發布一些代碼。

  • 設置憑據
  • 選擇 ParameterSet 表中的所有參數,其中 parameterSet 字段與從 Schedule A DDR 報告傳入的參數集名稱匹配
  • 對於每個參數
    • 設置參數數組以保存在檢索到的行中定義的參數。 (這就是您使用表格動態填充參數的方式。)
  • 結束於
  • 如果有從 Schedule A DDR 傳入的“nonZeroQuery”值
    • 然后運行 ​​nonZeroQuery 並在返回零行時退出。 (這是在不滿足某些條件時阻止查詢執行的方法;任何返回其他零值的查詢都將允許報告運行)
  • 萬一
  • 現在讓 SSRS 運行報告,使用我們剛剛從表中提取的參數,以及從 Schedule A DDR 傳入的報告名稱
  • 獲取輸出並將其寫入本地文件
  • 將文件通過電子郵件發送到從 Schedule A DDR 傳入的任何電子郵件地址

這讓我回到了我的舊工作,在那里我使用 SQL Server 2005 Enterprise 開發盒上的數據驅動訂閱編寫了一個問題的解決方案,然后我沮喪地發現我們的客戶只有標准版。

我當時為這篇文章添加了書簽,它看起來非常有前途,但在我有機會實施它之前,我最終換了工作。

當然,它是針對 2005 年的,但其中一條評論似乎表明它在 2008 年也有效。

R-Tag支持 SQL Server 標准版的 SSRS 數據驅動報告

我不會創建訂閱來修改訂閱表,而是將該部分放在其他地方,例如在 SQL 代理中。 但想法是一樣的。 一條定期運行的 SQL 可以在訂閱表中添加或更改行。

一個“SSRS訂閱表”的谷歌返回了一些有用的結果: 這是一篇基於2005年的文章,但2008年的原則應該是一樣的: 這篇文章是針對2008年的,也非常接近您所描述的。

我只會一一查看訂閱表中的字段,並確定每個字段需要什么。 嘗試手動創建一行(手動插入語句)以向自己發送訂閱。

您可以使用第三方解決方案 SQL-RD 來創建和運行數據驅動的計划,而無需升級到 SQL 企業。 它還帶有基於事件的調度(觸發事件報告,包括數據庫更改、文件更改、收到的電子郵件等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM