MDX currentmember / IS不一致?

时间:2013-08-25 06:33:15

标签: ssas mdx

我有三个查询要使用currentmember函数过滤成员。当过滤器应用于具有我想要过滤的成员的层次结构时,我可以使用IS运算符匹配成员并获得正确的结果。虽然过滤集和成员位于不同的层次结构中,但它不起作用。然而,如果不是对象比较,我可以正确地得到第二种情况的过滤结果,我只是进行标题比较。这些示例使用AdventureWorks数据库。

此查询与IS运算符一起正常工作:

select non empty [Measures].[Reseller Sales Amount] on 0,
Filter (NonEmpty({[Geography].[Country].[Country].ALLMEMBERS * [Geography].[City].[City].ALLMEMBERS}), [Geography].[City].Currentmember IS [Geography].[City].&[Seattle]&[WA]) on 1
来自[Adventure Works]的

这个使用标题比较(不同的结果,如预期的那样)

select non empty [Measures].[Reseller Sales Amount] on 0,
Filter (NonEmpty({[Geography].[Country].[Country].ALLMEMBERS}), [Geography].[City].Currentmember.MEMBER_CAPTION = 'Seattle') on 1
来自[Adventure Works]的

但是这个应该产生与前一个查询相同的结果,但不会返回任何内容:

select non empty [Measures].[Reseller Sales Amount] on 0,
Filter (NonEmpty({[Geography].[Country].[Country].ALLMEMBERS }), [Geography].[City].Currentmember IS [Geography].[City].&[Seattle]&[WA]) on 1
来自[Adventure Works]的

感谢。

2 个答案:

答案 0 :(得分:1)

事实上,这有点奇怪。对我来说,最令人惊讶的结果是第二个。该集合中没有参考要过滤到城市,然而,应用了过滤器。我认为第二个结果的原因是以某种方式“隐式覆盖”开始。

可能,第二个和第三个案例的处理方式不同,因为优化器会以某种方式选择不同的方式来解释语句。通常,字符串操作(如对标题的引用)的效率低于处理对象标识的IS运算符。

答案 1 :(得分:0)

看起来大多数评论都证实第二个查询的结果是一个错误。这里有更多评论in this other thread