SSAS OLAP多维数据集动态安全性。一个角色中的许多维度

时间:2016-09-26 12:38:14

标签: security dynamic ssas mdx olap

设置多维数据集后,我被要求使用用户表和他们可以看到的数据来添加动态安全性。

问题在于我必须考虑3个不同的维度。 我决定在count上使用带有noneEmpty函数的事实表。

NonEmpty([Dimension].[Hierarchy].members,
    ([Measures].[Allowed Count],
     [Users].[User].&[UserName]
     )
)

设定角色后,我得到的结果如下:

Dim1 | Dim2 | Dim3

1 | A | 300

1 | A | 320

1 | A | 340

1 | B | 300

1 | B | 320

1 | B | 340

它应该在哪里:

Dim1 | Dim2 | Dim3

1 | A | 300

1 | A | 320

1 | B | 340

允许用户访问的数据存储在表格中

用户名| Dim1Key | Dim2Key | Dim3Key

层次结构就像 每个Dim1都包含每种类型的Dim2,其中包含每种类型的Dim3。

用户只能在Dim1中的Dim2中访问Dim3的给定成员。

有没有办法在MDX中连接这个尺寸,所以每个Dim到底只有它各自的值

更新:

经过一番研究后,我得到了这个问题:

SELECT [Measures].[CC Count] ON 0,

NonEmpty(
(
NonEmpty((Dim1.children),
    ([Measures].[CC Count],
    [Users].[User].&[userName]
    ))
    ,
NonEmpty((Dim2.children),
    ([Measures].[CC Count],
    [Users].[User].&[userName]
    )), 
NonEmpty((Dim3.children),
    ([Measures].[CC Count],
    [Users].[User].&[userName]
    ))
    )
    ,([Measures].[CC Count],
    [Users].[User].&[userName]
    ))
ON 1
FROM [Cost Center]

这给了我想要的结果,但我无法将其放入角色的Dimensiom数据中。有没有办法改变它?

1 个答案:

答案 0 :(得分:1)

请尝试创建一个新的隐藏维度,其中key属性具有key1,key2和key3的复合键。你必须选择一些NameColumn,但这没关系。所以选择key1作为名称。除维度键外,维度上不需要任何内容​​。

在多维数据集设计器的维度用法中,确保将此新维度连接到所有事实表以及提供CC计数度量的安全度量值组。

然后在该维度上创建基于角色的安全性。用户将能够看到所有维度的所有成员,但是这个新的复合关键维度将确保他们无法查看他们不应该看到的事实行。这应该比单元安全的替代方案表现得更好。