2009-05-11 8 views
4

Report Builderで構築/管理されるレポートのデータソースを動的に変更できるようにする必要があります。基本的には同じDB構造ですが、各クライアントには独自のDBがありますので、ClientIDのパラメータに応じて動的に適切なDBに移動する必要があります。SQL Server 2005レポートビルダー動的にデータソースを変更する方法は?

誰もがこれに対して良い解決策を持っていますか?

答えて

1

datasource(私もそれが可能かどうかはわかりません)を動的にchaningするのではなく、渡されたパラメータに基づいて異なるデータベースからデータを動的にプルするストアドプロシージャを作成できます。

CREATE PROCEDURE ProcedureName 
    -- Add the parameters for the stored procedure here 
    @clientName nvarchar(100) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 

declare @sql nvarchar(max) 

set @sql='select * from ' + @clientName + '.dbo.Products' 

exec(@sql) 


END 
GO 
+0

これが機能するには、異なるクライアントデータベースが同じSQL Serverインスタンスで実行されている必要があります。 – Eppz

+0

私は問題が "レポートビルダー"で生成された "モデル"を使用する必要がありますが動作すると思う。ビルダーユーザーを報告するためにReport Builderを提供したいと考えましたが、モデルが配線されているために基盤となる接続を変更できない場合は、利用できない可能性があります。 –

+0

ああ。あなたはレポートビルダーについて何も言及していませんでした。どれだけ多くのクライアントを持っているかによって、クライアントごとにモデルを作成することはできますが、クライアントの数が多い場合や、クライアントのリストが大きく変わった場合はうまく機能しません。 – DForck42

1

これは、レポートモデルをサーバーに展開する場合と同様です。以下のようなアーキテクチャを採用することで、必要なものを実現することができます。

  • レポートサーバー上の各クライアントのフォルダを作成します。クライアントが互いのレポートを実行できないように適切な権限を設定します。このフォルダの下に「データソース」などのフォルダを作成し、このフォルダにすべてのレポートのデータソースを配置します。つまり、データソースをプログラムで再接続するツールであれば、データソースがレポートとの相対的な場所を正確に把握できます。データソースにも特定の予測可能な名前が必要であることに注意してください。

  • レポート、データソース、レポートモデルを展開するには、.net appを少し書きます。 SSRSがこれを行うためにかなり簡単なWebサービスをエクスポートするので、これは簡単に聞こえます。

  • IronPythonは、このWebサービスを試して、どのように駆動するかを理解するのに良い方法です。これを行うには、WSDLラッパージェネレータ(WSDL.EXE IIRC)を使用してC#スタブを作成する必要があります。スタブをコンパイルし、ライブラリをIronPythonに登録します。次に、インタラクティブシェルを使用してWebサービスAPIを試してください。あなたがその方法を気にしているなら、C#で書き直してください。

  • また、VB.netファイルを受け取り、結果をコンパイルしてVB.netを使用してレポートサーバーと連携するスクリプトを作成できるように、rs.exeというSSRSにバンドルされているツールもあります。

このネットアプリケーションはレポートを展開し、データソースを接続します。任意のフォルダの下に展開できるように設定します。顧客をセットアップするときは、フォルダを作成したときに設定した 'データソース'フォルダの下にデータソースを設定します。レポートファイルをプログラム的にデプロイし、数行のコードでデータソースに接続することができます。クライアントのフォルダの下にレポートを展開します。

アプリケーションは、コマンドラインからサーバー名とディレクトリを指定してレポートを展開し、そのデータソースを「データソース」フォルダの下のものに接続することができます。レポート内のデータソースへの参照には相対パスが使用されるため、階層内の位置がわかりにくくなる可能性があります。

バッチファイルでラップするか、その他の手段を使用してレポートスイート全体を自動的に展開します。これにより、テスト環境に簡単に導入できます。余分なボーナスポイントのために、アプリケーションを拡張して、顧客のルートの下の任意のディレクトリを歩き回り、そこで見つかったレポートをダウンロードすることができます。

レポートモデルの展開は、類似していますが、余計なことがあります。レポートモデルのプロパティの1つに、それに依存するレポートのリストがあります。このリストをキャプチャして(プログラムで行うのは簡単です)、レポートをデータソースに再接続する必要があります(レポートモデルです)。

これにより、レポートの任意のスイートを展開(またはダウンロード機能を実装している場合は複製)し、クライアントに固有のサーバー上のディレクトリに計画的に展開できます。また、クライアントのルートディレクトリからレポートへのアクセスを保護できるため、シンプルなセキュリティモデルを提供します。

関連する問題