重设切片上下文
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])
{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]
查询的解析顺序是:from(求值)——》where(处理)——》With Set(求值)——》Axis(求值)每个轴——》Result cell(求值)