我有三个查询要使用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]的
感谢。
答案 0 :(得分:1)
可能,第二个和第三个案例的处理方式不同,因为优化器会以某种方式选择不同的方式来解释语句。通常,字符串操作(如对标题的引用)的效率低于处理对象标识的IS
运算符。
答案 1 :(得分:0)
看起来大多数评论都证实第二个查询的结果是一个错误。这里有更多评论in this other thread