【问题标题】:Sql Server analysis Services 2008 Dynamic dimension security using MDX expressionSql Server analysis Services 2008 动态维度安全使用MDX表达式
【发布时间】:2009-08-07 10:06:12
【问题描述】:

我仓库中的一些维度表:

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 的成员 组报告浏览器。我在 BIDS 中为该组创建了一个角色,并在维度数据选项卡中添加了一个 MDX 表达式 对于 Username 属性的 AllowedSet 框中的此维度:

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

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

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

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

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

我做错了什么?

【问题讨论】:

  • 很难理解这个“隐藏”过滤器的概念。我以前做过类似的事情,但是我必须非常小心 SQL Analysis Services 2000 中称为“Visual Totals”的东西。恐怕我不知道 BIDS 的后果是什么。抱歉,这不是很有帮助。相信我,您必须非常非常仔细地进行测试,使用比您认为必要的更多的测试场景!

标签: security sql-server-2008 ssas mdx dimensions


【解决方案1】:

嗯,现在已经有一段时间了。即使现在我也没有完整的答案,但我确实得到了一些帮助,这让我找到了解决方案。详情可见here

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

MyAssembly.MyMethod(UserName)

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多