1

私の倉庫のいくつかのディメンションテーブル:

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つのディメンションでこれらの2つのディメンションテーブルを使用しました。ユーザー名は、SSASサーバー上の2つのローカルWindowsユーザーアカウントに関連しており、ローカルWindowsグループReportBrowsersのメンバーです。BIDSでそのグループの役割を作成し、ユーザー名属性の[許可されたセット]ボックスのこのディメンションの[ディメンションデータ]タブにMDX式を追加しました。

STRTOMEMBER("[UserSiteSite].[Username].["+Trim(Mid( UserName, InStr(1, UserName, "\")+ 1,128))+"]")

このディメンションは、すべて処理およびデプロイされるキューブで使用されます。次に、そのキューブに基づくSSRSレポートがあります。

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

したがって、EMSUser1の場合、両方のサイトのレコードが表示されますが、最初のサイトのみが許可されているようです(ID 2の「サイト2」)ファクトテーブルにそのサイトのレコードが存在する場合でも、「サイトA」の兆候はありません。

私はAnalysisServices2008を解き放ち、ステップバイステップの本やブログなどを巡回してきました。目標を達成するために内部の仕組みを完全に理解することはできません。

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

4

1 に答える 1

0

さて、もうしばらく経ちました。私は今でも完全な答えを持っていませんが、それが私を解決策に導いた他の場所で助けを得ました。詳細はこちらをご覧ください

この種のシナリオを解決する方法はたくさんあります。私にとってはまだ良いものがあるかもしれないと感じていますが、少なくともうまくいくものがあります。基本的に、データベースへの独自の接続を確立し、許可されたセットを選択する静的クラスと関数を使用して、個別のクラスライブラリを作成します。Microsoft.AnalysisServicesおよびMicrosoft.AnalysisServices.AdomdServer名前空間を参照する場合は、「Set」オブジェクトを返すことができます。次に、ロールオブジェクトのディメンションデータアドバンスタブでこの関数を呼び出すことができます。

MyAssembly.MyMethod(UserName)
于 2009-08-24T08:33:56.253 に答える