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

Posted

技术标签:

【中文标题】SSAS OLAP 多维数据集动态安全性。一个角色中的多个维度【英文标题】:SSAS OLAP Cube Dynamic Security. Many dimensions in one role 【发布时间】:2016-09-26 12:38:13 【问题描述】:

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

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

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

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

Dim1 |暗淡2 |昏暗3

1 |一个 | 300

1 |一个 | 320

1 |一个 | 340

1 |乙| 300

1 |乙| 320

1 |乙| 340

它应该在哪里:

Dim1 |暗淡2 |昏暗3

1 |一个 | 300

1 |一个 | 320

1 |乙| 340

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

用户名 | Dim1Key | Dim2Key |调暗键

层次结构就像 每个 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]

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

感谢您的回复。我正在实施你的想法,有一个问题。这个新维度应该建立在安全表或主要事实表的基础上? @Zergister 嗯。如果它建立在所有 3 个键的交叉连接上,会不会太大?如果没有,那就这样做。如果是这样,您将需要至少存在于任何事实表中的任何组合。 好吧,我得出了同样的结论:D

以上是关于SSAS OLAP 多维数据集动态安全性。一个角色中的多个维度的主要内容,如果未能解决你的问题,请参考以下文章

在连接到 SSAS OLAP 多维数据集的 Excel 中按键排序

在 SSAS 中,可以忽略多维数据集级别的表关系吗?

Tableau 中的多维数据集

将破坏 OLAP 多维数据集的字符列表

OLAP 多维数据集中计算成员中的条件

使用 C# 对 SQL Server OLAP 多维数据集进行单元测试