エンタープライズの支払いを避けるために、SQL Server Standardにこのような機能を実装しました。最初に、私は「DDRをスケジュールする」(データ駆動型レポート)というレポートを作成しました。このレポートには、次のパラメータがあります。
レポートに含める:データテストが満たされた場合にトリガーするSSRSレポートの名前(フォルダを含む)。例えば。 "/ Accounting/Report1"。
パラメータセット:レポートで使用するパラメータをルックアップするために使用される文字列。例えば。 "ABC"
レポートを実行する必要があるかどうかを確認するクエリー:1つの値(ゼロまたは非ゼロ)を返すSQLクエリ。 0は「このレポートを実行しない」と解釈されます。
電子メール受信者:実行された場合、レポートを受信するセミコロン区切りの電子メール受信者のリスト。
「DDRをスケジュールする」レポートは実際にここで実行されているレポートであり、出力は私に送信されます。何が実行されるのですか別のレポート - この場合は "/ Accounting/Report1"であり、これらの電子メールアドレスが必要なレポートです。だから、 "スケジュールするDDR"は本当にレポートではありませんが、それはスケジュールされていて、同じように動作します。レポートを作成して実行するガジェットです。この場合には、「ABC」 - - テーブル内のレコードのセットを持って
CREATE TABLE [dbo].[ParameterSet](
[ID] [varchar](50) NULL,
[ParameterName] [varchar](50) NULL,
[Value] [varchar](2000) NULL
) ON [PRIMARY]
各パラメータセットを次のように
は、私はまた、定義されたSQLのテーブルを持っています。この場合、レコードはABC/placecode/AAとABC/year/2013となります。これは、ABCに2つのパラメータがあることを意味します:placecodeとyear、値は "AA"と "2013"です。
SSRSレポートに "DDRのスケジュール設定" のためのデータセットはDDR3
DDR.dbo.DDR3 @reportName, @parameterSet, @nonZeroQuery, @toEmail;
でストアドプロシージャです:
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フィールドは、これらのパラメータの各々についてのスケジュールA DDRレポート
- から渡されたパラメータセット名と一致するParameterSetテーブル内のすべてのパラメータを選択し
- 取得された行で定義されたパラメータを保持するようにparameters配列を設定します。 (これはテーブルを使用してパラメータを動的に入力する方法です。)
- エンド
- のスケジュールA DDRから
- を渡された「nonZeroQuery」値がある場合、あなたが戻ってゼロ行を得た場合次にnonZeroQueryし、終了を実行します。 (これは、いくつかの条件が満たされていない場合は、クエリの実行を防ぐ方法です。他の何かにゼロを返す任意のクエリは、レポートを実行できるようになります)
- エンド
- が今使用して、レポートを実行するためにSSRSを頼めばパラメータは、私たちはテーブルから抽出し、レポート名は、出力を取得し、ローカルファイルへ
- メールスケジュールA DDR
から渡されたものは何でも電子メールアドレスにファイルを、それを書く
- スケジュールA DDRから渡されました
いいえ、馬鹿げた考えではなく、彼はMSの部分的な答えは、SSRSエンタープライズに移動してすぐにデータ駆動型のサブスクリプションを取得することになります。 –
誰かが興味があれば私はあきらめてPHPでそれをやった:-) –