2

我有三个查询要使用 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

来自[冒险作品]

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

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

来自[冒险作品]

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

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

来自[冒险作品]

谢谢。

4

2 回答 2

1

事实上,这有点奇怪。对我来说,最令人惊讶的结果是第二个。集合中没有要过滤到城市的引用,但仍应用了过滤器。我认为第二个结果的原因是不知何故“隐式覆盖”开始了。

可能,第二种和第三种情况的处理方式不同,因为优化器以某种方式选择了不同的方式来解释语句。IS通常,像对标题的引用这样的字符串操作比处理对象标识的操作符效率低。

于 2013-08-27T12:18:21.930 回答
0

看起来大多数评论都确认第二个查询的结果是一个错误。在这个其他线程中还有一些评论

于 2013-08-28T17:49:37.653 回答