我已經在SQL Server Standard上實現了類似的東西,以避免爲Enterprise付費。首先,我編寫了一份名爲「安排DDR」(數據驅動報告)的報告。該報告具有以下參數:
報告計劃:如果符合數據測試,您要觸發的SSRS報告的名稱(包括文件夾)。例如。 「/會計/報表1」。
參數集:將用於查找要在報告中使用的參數的字符串。例如。 「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中有兩個參數:地點代碼和年份,並且它們具有值「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場從預約A DDR報告
- 在通過對於每個這些參數的參數設定名稱匹配的所有參數
- 設置參數數組以保存檢索行中定義的參數。 (這是你如何使用表來動態填充參數。)
- 結束了
- 如果有從附表一DDR通過在「nonZeroQuery」值
- 然後運行nonZeroQuery並退出,如果你得到了零行回來。 (這是你如何避免查詢執行,如果某些條件沒有滿足;返回這是其他零的任何查詢將允許運行報表)
- 結束時,如果
- 現在問SSRS運行報告,使用參數我們剛剛從表中提取,並且報告名稱從附表一DDR
- 得到的輸出,並將其寫入到本地文件
- 電子郵件文件到任何電子郵件地址來自附件A DDR
傳入傳遞
不,不是一個愚蠢的想法,但噸他MS部分線路答案將是去SSRS企業開箱即用數據驅動的訂閱。 –
如果有人有興趣,我放棄了,並在PHP中完成它:-) –