質問

私の倉庫内のいくつかのディメンション表:

DML
Site
    Id      bigint
    Name    nvarchar(256)
    Primary key (Id)

DATA
SiteId    Name
2         Site 2
3         Site A

DML
UserSite
    Username    nvarchar(256)
    SiteId      bigint
    Primary key (Username, SiteId)
    Foreign key (SiteId) referrences Site(Id)

DATA
Username    SiteId
EMSUser1    2
EMSUser1    3
EMSUser2    3

マイSSASプロジェクト:を 私は、BIDSプロジェクト内の1つの次元でこれら二つのディメンション表を使用し、ディメンションウィザードを使用して作成しました。 ユーザ名は、SSASサーバー上の2つのローカルWindowsユーザーアカウントに関連し、彼らはローカルのWindowsのメンバーであります グループReportBrowsers。私は、BIDSでそのグループの役割を作成したとディメンションデータ]タブにMDX式を追加しました

:ユーザー名属性のAllowedSetボックスで、このディメンションの
STRTOMEMBER("[UserSiteSite].[Username].["+Trim(Mid( UserName, InStr(1, UserName, "\")+ 1,128))+"]")

この寸法は、すべての処理され、展開されていますキューブで使用されています。私は、そのキューブに基づいてSSRSレポートを持っています。

私の意図:を 私は何をしようとしていることは、ユーザーにログインし、現在閲覧SSRSを取ると、返された文字列の「<ドメイン> \」の部分を削除しています 効果的にユーザ名がのレコードを持っているだけのサイトに結果をフィルタリングします。

私は両方のサイトのレコードを参照する必要がありますが、それは最初のものだけを許可するように見えるEMSUser1ためので(同上2と「サイト2」) レコードはファクトテーブルでそのサイトには存在していても、「サイトA」の兆候はありません。

私は分析サービスを通じてトローリングしてきた解き放たれ、ステップブックによると、すべてのなどのブログの上にステップ2008 私はちょうど、非常に私の目標を達成するための内部の仕組みを完全に理解することはできません。

私が間違って何をしているのですか?

役に立ちましたか?

解決

まあそれは今、いくつかの時間がかかりました。私は今でも完全な答えを持っていないが、私はそれが解決策に私をリードしている他のいくつかの助けを手に入れました。詳細はここで見つけることができますのます。

このようなシナリオを解決する方法はたくさんあります。私はまだ私のためのより良い1があるかもしれないと感じ、私は、少なくとも作品何かを持っています。基本的には、データベースへの独自の接続だ行い、許可されたセットを選択し、静的クラスと機能を備えた別々のクラスライブラリを作成します。あなたはMicrosoft.AnalysisServicesを参照する場合 そして、Microsoft.AnalysisServices.AdomdServer名前空間には、あなたは「SET」オブジェクトを返すことができます。その後、役割で、この関数は、ディメンションデータの事前タブオブジェクトを呼び出すことができます:

MyAssembly.MyMethod(UserName)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top