我使用USER作为表达式,基于.NET程序集实现SSAS维度安全性,该程序集调用存储过程将其设置为允许的维度集。
我在两个维度上实现了这种安全性。
就像任务和项目
我有两个事实表,一个与任务相关,另一个与项目相关
所有这一切都很简单,棘手的部分是任务与项目相关,任务维度与项目事实表相关,但并非所有项目都必须与任务相关。
任务也与项目相关,因此任务维度跨越项目事实表。
这一切都有效但是在测试时我注意到返回的数据并不是用户应该访问的所有数据,所以我建立了一个Log表来记录.net程序集将返回的集合,即访问该集合的用户多维数据集以及用户有权访问的成员数。
我测试了它并且日志表正确注册:
用户行SET
UserA 103 {....}
但是只显示20行数据。
当我删除MDX的NON EMPTY子句时,所有行都出现了,但是值为NULL
我挖了一点,发现问题出在跨越事实表的维度上,当我删除那些提到的交叉点时,所有数据都被揭示了。
提前致谢。 GabrielGuimarães
答案 0 :(得分:0)
听起来一切都按设计工作......这是NON EMPTY的正确行为......就像为WHERE xxx IS NOT添加过滤器一样。
或者你是说在删除NON EMPTY子句后应该有值看到null的值?