2012-03-24 3 views
1

各ユーザーを表示できる「ユーザー」テーブルがあります。User!UserIDを使用してレポートサーバーのデータを制限する方法

今後のレポートでは、このUserテーブルを使用する予定であり、グローバル変数User!UserIDを利用する最良の方法を進めていきたいと思います。

私が設定した探索的なレポートでは、パラメータ@myUserを持つストアドプロシージャが使用されています.SprocではデータはINNER JOINEDがUserテーブルに、WHERE句では@myUserでデータを制限します。

私はデータセットとしてこのSPROCを使用し、これはその後、@myUserパラメータを作成し、報告書の中で
CREATE PROCEDURE [dbo].[pr_SSRS_Dly_Data] 
      @myUser VARCHAR(50) 
AS 

SELECT 
      x.[Date] 
      , x.Product               
      , x.Amount 
FROM 
      WHReports.dbo.tb_Dly_Data x 
      INNER JOIN WHReports.dbo.tb_Users y        
          ON 
          x.CustomerKey = y.CustomerKey 
WHERE  1 = CASE WHEN (@myUser = y.LoginName) THEN 1 ELSE 0 END 

- !@myUserパラメータのデフォルト値のセクションでは、私が表現ユーザーを使用しユーザーID。また、私はこのパラメータを非表示にします。

これが最善のアプローチですか?

答えて

1

あなたのアプローチは正しいですが、私はちょうど2つの小さな変更があります。

CREATE PROCEDURE [dbo].[pr_SSRS_Dly_Data] 
      @myUser VARCHAR(50) 
AS 

SELECT 
      x.[Date] 
      , x.Product               
      , x.Amount 
FROM 
      WHReports.dbo.tb_Dly_Data x 
      INNER JOIN WHReports.dbo.tb_Users y        
      ON y.CustomerKey = x.CustomerKey 
WHERE  @myUser = y.LoginName 
+1

JOINのaswellに誤りがありますように見える - それはデカルトかもしれないと思うが。私はエイリアスの1つを修正します – whytheq

+0

他のクエリでは "WHERE 1 = CASE WHEN ...."という構造体を使用しましたが、上記のような必要性はほとんどありません。もし私がパラメータをNULL可能にしたいのであれば、CASEは元のクエリに "WHEN NULL THEN 1"という文字列を追加することもできます。 – whytheq

+0

また、セキュリティのために、メインデータクエリのパラメータを再チェックする必要があります。パラメータを提供するクエリ(ユーザーは、IDに関係なく、有効なパラメータを提供するためにURLアクセスを使用できます)。 –

関連する問題