多维数据集(sql Server 2016)包含维[Unit].[Unit].&[1]
和[Unit].[Unit].&[2]
。我创建了一个计算维度:
CREATE MEMBER CURRENTCUBE.[Unit].[Unit].[All].[1/2] AS [Unit].[Unit].&[1]/[Unit].[Unit].&[2]
要限制对[Unit].[Unit].[All].[1/2]
维度的访问,我已创建了角色。
但是我无法在DimensionData-Basic选项卡中选择[Unit].[Unit].[All].[1/2]
,因为此属性不会出现在属性列表中。
如果我在MDX脚本[Unit].[Unit].[All].[1/2]
的DimensionData-Advanced选项卡中指定属性Denied member set: {[Unit].[Unit].[All].[1/2]}
,则用户会看到此属性。
如何限制对计算维度的访问?
答案 0 :(得分:1)
如果您将DimUnit SQL表更改为包含" 1/2"然后用以下代码替换你的CREATE MEMBER
语句它应该工作相同,你应该能够在部署和处理多维数据集后在维度数据安全性中看到这个成员:
([Unit].[Unit].[1/2])
= DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]);
然后,在创建了使1/2成员消失的角色之后,在使用该用户浏览多维数据集时会出现错误。将上面的行更改为以下内容:
(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED))
= DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]);
顺便说一句,DIVIDE
确实存在安全分歧,因此除以零不会导致问题。
我不能回想起StrToMember是否有必要而不仅仅是会员参考,所以我玩得很安全。如果没有StrToMember,请随意试用。
要清楚整个剧本应该说:
CALCULATE;
(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED))
= DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]);