我创建了角色来相应地过滤数据,user1
只能看到伦敦100,从这里到英国的汇总也是100。
我还有一个FactlyDimension,它将DimUsers和DimBranch联系成多对多的关系
请求是user1,只能看到伦敦100(就像之前一样)而不是UK-100,他需要看到全英国(150)。那可能在SSAS中实现吗?
答案 0 :(得分:1)
你有没有检查过"启用Visual Totals"设置维度安全性时的选项?
http://bidn.com/blogs/jamserra/ssas/1881/show-correct-totals-when-using-ssas-role-security
听起来好像你已经以某种方式启用了此选项,这使得英国总数为100.默认情况下,它被禁用,这将使您所需的伦敦结果= 100,英国= 150。 / p>
答案 1 :(得分:1)
是的,抱歉没有注意到您的分支维度是父子 - 即使这是在问题标题中!
我已经设置了一个镜像你的设置的测试立方体(据我所知)。我忽略了当我设置自定义MDX角色安全时我得到的愚蠢错误“无法找到维度用户”;而忽略了在SSDT(又名Visual Studio)多维数据集浏览器中,这个自定义安全不起作用的事实。让我们把它归结为SSDT UI作为POS - 因为在SSMS MDX查询中,我得到了我期望的结果。
这是我的分支表:
BranchID ParentID BranchName
1 NULL Scotland
2 NULL England
3 1 Glasgow
4 1 Edinburgh
5 2 Bristol
6 2 London
Branch维度上有两个层次结构:一个名为BranchID(仅在属性BranchID上),另一个名为ParentChild,它是使用ParentID的父子层次结构。
我通过在“允许的成员集”框中使用此表达式来限制对“受限”用户的Branch.ParentChild层次结构的访问:
NONEMPTY(Branches.[ParentChild].members,
(Measures.UserBranchAccess,StrToMember("[Users].[" + UserName + "]")))
所以现在我通过填充我调用UserBranchAccess的表来授予所有分支到“受限访问”用户的权限。 (生成的COUNT度量我称之为UserBranchAccess)。然后删除相应的行,删除对Bristol的访问权限。
在SSMS中运行此查询并将EffectiveUserName设置为“受限用户”,我得到您正在寻找的结果:
SELECT
NONEMPTY(Branches.[ParentChild].members,
(Measures.UserBranchAccess,StrToMember("[Users].[" + UserName + "]")))
ON 0
FROM [Test Dimensions]
结果:
All England London Scotland Edinburgh Glasgow
700 550 50 150 50 100
(此处显示我的默认度量称为分支总计 - 请注意,布里斯托尔的500未显示,但包含在英格兰总数中。)
然后,我尝试删除两者布里斯托尔和英格兰对“受限制”用户的访问权限。我得到完全相同的结果。
让我们看看“安全”措施UserBranchAccess正在发生什么:
SELECT
Branches.[ParentChild].members ON 0
FROM [Test Dimensions]
WHERE
(UserBranchAccess,Users.[User ID].[RestrictedUser])
结果:
All England Bristol London
4 1 (null) 1
(苏格兰没有透露清楚)。
英格兰被允许,因为至少有一个孩子被允许。
为了检查我是否没有错过任何处理,我在Branch维度的(非父子)层次结构上进行了相同的查询:
SELECT Branches.[BranchID].Members ON 0
FROM [Test Dimensions]
WHERE
(UserBranchAccess,Users.[User ID].[EMEA\martinhe])
结果符合预期:英格兰未在正常的BranchID层次结构中明确允许,但在父子层次结构中被允许(请参阅上一个结果):
All Bristol England London
4 (null) (null) 1
(同样,苏格兰没有透露清楚)。
所以最重要的是,我无法重现你所拥有的问题,即(使用我的数字)伦敦将显示50 和英格兰也只会显示50。
但也许您可以确定您的设置与我的不同之处?