如果我对某些术语有误,请原谅,我对MDX / OLAP还是比较陌生。

我有一个确定道德墙的维度。尺寸如下所示:

Ethical Wall (dimension)
   --> Matter ID (hierarchy)
   --> Walled (hierarchy)
   --> White Listed Initials (hierarchy)
   --> Black Listed Initials (hierarchy)
[Walled]层次结构包含true或false,这取决于该问题是否应用了隔离墙。

白名单和黑名单层次结构分别包含有权访问事务或无法访问事务的用户的用户姓名缩写。请注意,事项是白名单或黑名单,它绝不是两者的结合。

我已经能够相对轻松地解决无墙场景和白名单场景的问题,但是黑名单场景存在很多问题。到目前为止,这是我提出的where子句:
({
    (
        [Ethical Wall].[Walled].&[True]
        ,[Ethical Wall].[White Listed Initials].&[XXX]
        ,[Ethical Wall].[Black Listed Initials].&[]
    )
    ,(
        [Ethical Wall].[Walled].&[True]
        ,[Ethical Wall].[White Listed Initials].&[]
        ,-{[Ethical Wall].[Black Listed Initials].&[XXX]}
    )
    ,(
        [Ethical Wall].[Walled].&[False]
        ,[Ethical Wall].[White Listed Initials].&[]
        ,[Ethical Wall].[Black Listed Initials].&[]
    )
})

向下剥离并将其表示在表中的原始数据集(我正在从中过滤掉)看起来像这样:

ssas - MDX排除层次结构中存在值的结果-LMLPHP

我只想选择首字母为 XXX 的用户可以访问的Ids。从上方应用过滤器,我会得到所有3个Ids。我正在寻找的结果集只有Id 12。上方的文件匹配如下:

ssas - MDX排除层次结构中存在值的结果-LMLPHP

我了解为什么我的过滤器会检索所有3个Ids,但是我不知道如何修改过滤器的中间部分以正确排除Ids。这是过滤器的冒犯部分:
    ,(
        [Ethical Wall].[Walled].&[True]
        ,[Ethical Wall].[White Listed Initials].&[]
        ,-{[Ethical Wall].[Black Listed Initials].&[XXX]}
    )

如何修改过滤器以匹配该数据集?

ssas - MDX排除层次结构中存在值的结果-LMLPHP

最佳答案

你为什么不能简化这个呢?

WHERE
({
    (
        [Ethical Wall].[Walled].&[True]
        ,[Ethical Wall].[White Listed Initials].&[XXX]
    )
    ,(
        [Ethical Wall].[Walled].&[False]
        ,[Ethical Wall].[White Listed Initials].&[]
    )
});

关于ssas - MDX排除层次结构中存在值的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44835658/

10-12 23:08