重设切片上下文

select 
{Filter(
   
[Product].[Category].Members,
    (
[Measures].[Unit Sales], [Time].[Quarter].[Q4, 2005])
   
>1.4 * ([Measures].[Unit Sales], [Time].[Q4, 2004])
)}
on axis(0)
From sales
where ([Time].[2005], [Measures].[Dollar Sales])

      切片设置[Time].[2005]和[Measures].[Dollar Sales],但Filter()函数表达式在[Time].[q4,2005]和[Time].[q4,2004]上比较[Measures].[Unite Sales]。用于Filter()函数中的表达式,或用于决定任何其他部分的表达式,能够有选择性地去依靠或者重设单元上下文的任何部分。所以结果是2005年的Dollar Sales,但筛选条件完全是其他时间周期的Unit Sales。

      尽管我们突出了列轴,但下面的说法对所有轴都是成立的:

      1)每个轴的求值都从Where子句中获得单元上下文。

      2)每个轴都可以独立地求值。

      比如上面的例子,虽然轴axis(0)where中获得的上下文是 ([Time].[2005], [Measures].[Dollar Sales]),但axis(0)中的Filter函数重设[Time]维度和 [Measures]维度的上下文为[Q4, 2005][Unit Sales],搜索的结果是:2005年第四季度[Unit Sales]比2004年第四季度大1.4倍的所有产品类别在2005年的[Dollar Sales]

 image

      查询的解析顺序是:from(求值)——》where(处理)——》With Set(求值)——》Axis(求值)每个轴——》Result cell(求值)

posted on 2009-11-21 22:52  一粒沙  阅读(178)  评论(0编辑  收藏  举报