【问题标题】:Dimension security OLAP. Again维度安全OLAP。再次
【发布时间】:2015-09-15 20:06:49
【问题描述】:

有一个事实表。该事实表由两种类型的用户查看。每个角色都可以访问不同的维度:角色 A 可以查看特定客户集 (c1, c2) 的值。角色 B 可以查看特定事务类型集 (t1, t2) 的值。实际上它是动态安全性,但这无关紧要,它对确定的集合同样有效。

用户 u1 属于两个角色,他的权限 u1(x,y) 所以...

Role A: x ∈ {c1, c2} AND y ∈ T
Role B: x ∈ C AND y ∈ {t1, t2}

因为 SSAS 安全性是附加的(角色 A 或角色 B),所以我看到了一切。

如果我使用

Role A: x ∈ {c1, c2} AND y ∉ T
Role B: x ∉ C AND y ∈ {t1, t2}

那我只看到了

x ∈ {c1, c2} AND y ∈ {t1, t2}

我想要

x ∈ {c1, c2} OR y ∈ {t1, t2}

最好不使用程序集和/或创建包含所有客户交易排列的维度。

是否可以仅使用角色(逻辑)来解决这个问题?

编辑:至少可以说,我的集合代数生锈了。我在工作中通常不使用数学(写下一些逻辑比加载数据要快得多),请随时纠正我的涂鸦。

【问题讨论】:

    标签: logic ssas


    【解决方案1】:

    我认为您应该能够在“角色单元数据”选项卡中执行此操作。我已经使用来自多个维度的单个成员对此进行了测试。

    我勾选了“启用读取权限”,并将其放入“允许读取多维数据集内容”框中:

    ([Customer].CurrentMember IS [Customer].c1) OR     
    ([TransactionType].CurrentMember IS [TransactionType].t1)
    

    您可以根据需要添加更多 OR。您必须删除或至少认真考虑维度安全性以及它将如何与单元安全性交互。

    请注意,与 Dimension security MDX 框不同,在此框中,MDX 应返回一个逻辑 (0,1) 值以确定安全性。

    感谢 GregGalloway 在另一个问题中,我已经想出了如何扩展 IS 以在集合上工作:

    (INTERSECT([Customer].CurrentMember,{[Customer].C1,
    [Customer].C2,...}).Count>0)
    

    【讨论】:

    • 我是 SSAS 新手,所以我担心将单元安全性与动态集结合使用会对查询性能产生痛苦的影响,所以我什至没有考虑过。也许这是做到这一点的唯一方法。谢谢你的回答!
    • 很高兴我能帮上忙。我听说过有关单元安全性会对性能产生影响的事情(刚刚在我拥有的沙坑立方体上进行了测试,还没有现场尝试过)。如果对您有用,请将我的回复标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多