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 项目中的一个维度中使用了这两个维度表。用户名与 SSAS 服务器上的两个本地 windows 用户帐户相关,它们是本地 windows 组 ReportBrowsers 的成员。我在 BIDS 中为该组创建了一个角色,并在 Username 属性的 AllowedSet 框中为该维度的维度数据选项卡添加了一个 MDX 表达式:

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

此维度用于已全部处理和部署的多维数据集。然后我有一个基于该多维数据集的 SSRS 报告。

我的意图: 我要做的是获取当前正在浏览 SSRS 的登录用户并删除返回的字符串的“<domain>\”部分,从而有效地将结果过滤到用户名有记录的站点。

因此,对于 EMSUser1,我应该看到两个站点的记录,但它似乎只允许第一个(“站点 2”,ID 为 2)即使事实表中存在该站点的记录,也没有“站点 A”的迹象。

我一直在浏览Analysis Services 2008 的发布和分步手册以及所有博客等。我只是无法完全了解内部工作以实现我的目标。

我究竟做错了什么?

4

1 回答 1

0

好吧,现在已经有一段时间了。即使现在我也没有完整的答案,但我确实得到了一些帮助,这让我找到了解决方案。详细信息可以在这里找到。

有很多方法可以解决这种情况。我觉得对我来说可能还有一个更好的,但我有一些至少可以工作的东西。基本上创建一个带有静态类和函数的单独类库,使其与数据库建立自己的连接并选择允许的集合。如果您引用 Microsoft.AnalysisServices 和 Microsoft.AnalysisServices.AdomdServer 命名空间,您可以返回一个“Set”对象。然后,您可以在角色对象维度数据高级选项卡中调用此函数:

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