2017-03-20 9 views
0

私たちはSSASキューブで動的セキュリティを実装しています。私達は私達の間で定義された対策[ユーザー従業員のアクセス数]で、私たちは、ブリッジテーブルを持って、次のhierachy(親ではない子)SSASの低速動的セキュリティ

Region 
    Corporation 
    Department 
     Team 
     Employee 

と従業員の次元があり、SQL Serverの2012

を使用していますユーザーテーブルと従業員テーブル。

キューブディメンション従業員のチーム階層では、許可されたセットに対して次のMDXがあります。

NONEMPTY 
    (
     [Employees].[Team].[All].Children, 
     (
      StrToMember("[User].[Username].&["+coalesceempty(customdata(),username)+"]"), 
      [Measures].[User Employee Access Count] 
     ) 
    ) 

これは動的セキュリティを実装するデフォルトの方法であることがわかりました。

問題は、ユーザーが最初にキューブにアクセスするときに待ち時間が長くなることです。 Employeeディメンションのメンバーは約40,000人あります。クエリでMDXを使用するには、実行に約2〜3秒かかりますが、ユーザーが最初にintを記録すると、大部分またはすべての従業員にアクセスできる場合、終了する前に、クエリは最大90秒間ハングします。

クエリは重要ではなく、その後のクエリではパフォーマンスが低下しません。

私の推測では、SSASは内部セキュリティ構造を構築するために時間を使います。 私は上記のMDXをMDXクエリのセットとして定義し、SSMSで実行すると、ユーザーが40,000ディメンションのメンバーにアクセスしてもすべての行を返すのに2〜3秒かかり、これにはすべての行を印刷するためのSSMSによるオーバーヘッド。

私はセキュリティ設定を組み合わせようとしました。ほとんどのユーザーは従業員のほんの一部にしかアクセスできないが、待機時間は30秒未満で遅くても問題ありませんが、多くの従業員にアクセスできるユーザーのグループを作って拒否しました管理は煩雑で、最初のログイン時にはまだ高い待ち時間があります。

現在、待ち時間が最も長く、最も頻度の高いユーザーをループするジョブを設定し、30分ごとにキューブに対して単純なMDXクエリを実行します。これにより、動的セキュリティが強化され、ユーザーへの影響が最小限に抑えられますが、初回ログイン時には待機する必要があり、最初のクエリ待ち時間を避けたいのが理想です。

大規模な環境で多数のレポートユーザーが動的なセキュリティを経験したことがある人はいますか?

+0

ところで、ユーザーがサービスユーザーとしてログインしてカスタムデータとしてユーザー名を含むカスタムコンポーネントを通じてキューブにアクセスすることがあるため、 "customdata()"が存在します。 –

+0

あなたが理解できる場合、ユーザーが見ることができるチームを制限します。チーム1と部門1の権限を持つユーザーは、部門2の部門合計を確認できますが、他のチームのチーム合計は表示されません。部門1の合計を見ると、チーム1の合計か、部門1の全チームの合計が表示されますか?ロールの次元データセキュリティタブのビジュアルトータルボックスのチェックを外すと、パフォーマンスが向上する可能性があるため、私は尋ねています。それがあなたの要求を満たすなら、試してみる価値があります。 – GregGalloway

答えて

1

NonEmpty()は計算量が多く、巨大なディメンションになってしまい、毎回実行する必要があります。ディメンションテーブルに列を設定するとどうなりますか?同様に:

|=======================================================| 
|UserID | UserName | EmployeesSet      | 
|=======================================================| 
| 1  | Adam B | {[Employees].[Employees].&[Adamb]} | 
|=======================================================| 

その後、キー値として、それをインポートし、StrToSet(とそれを解析)の代わりに実行されている空ではない()関数のことができます。

関連する問題