如何编写MDX过滤器禁用SSAS中过去时间段的回写权限?
完善SSAS回写安全规则的MDX语句
嘿,你的思路方向完全没问题!不过咱们需要调整一下MDX的写法,确保维度成员的引用准确,适配SSAS角色单元格安全的规则逻辑。
修正后的MDX语句
[Date].[MonthDate].CurrentMember.MemberValue >= [ForecastPeriod].[ForecastFirstDate].CurrentMember.MemberValue
为什么这么写?
- 直接比较维度成员本身可能会因为成员的排序、键值格式问题导致判断出错,所以必须用
.MemberValue来提取成员背后的实际日期值,这样才能做正确的日期大小对比。 - 要确保
[Date].[MonthDate]和[ForecastPeriod].[ForecastFirstDate]都是基于日期数据类型的属性层次结构,不然日期值的比较逻辑会失效。
额外的注意事项
- 测试验证:在SSMS里可以先跑个查询验证逻辑是否符合预期,比如针对3月的ForecastPeriod,看看哪些日期成员满足条件:
SELECT [Measures].[Value] ON 0, Filter( [Date].[MonthDate].[MonthDate].Members, [Date].[MonthDate].CurrentMember.MemberValue >= [ForecastPeriod].[ForecastFirstDate].[3/1/2018].MemberValue ) ON 1 FROM [你的多维数据集名称] WHERE [ForecastPeriod].[ForecastFirstDate].[3/1/2018] - 角色权限配置:别忘了给这个角色授予
[Value]度量值的回写权限,在“单元格数据”选项卡选择“允许回写”,再把上面的MDX作为允许回写的条件。 - 空值处理:如果维度里有空成员,建议加上空值判断避免逻辑错误:
NOT IsEmpty([Date].[MonthDate].CurrentMember) AND NOT IsEmpty([ForecastPeriod].[ForecastFirstDate].CurrentMember) AND [Date].[MonthDate].CurrentMember.MemberValue >= [ForecastPeriod].[ForecastFirstDate].CurrentMember.MemberValue
内容的提问来源于stack exchange,提问作者Pontus Haglund
相关产品推荐
相关产品推荐

