出了當前單元的上下文,還有但前迭代或迴圈的上下文。Generate()函數用來提供迭代。彙總函式(如Sum(),Max()等等)同樣提供迴圈上下文,每迭代一次就對錶達式求值一次。
例1.
考慮一下的查詢,選出一組作品集,這個集計算其[Unit Sales]對其同類最大[Unit Sales]的比例。
with
member [Measures].[Pct of Max Siblings] as
'[Measures].[Unit Sales]/
Max(
[Product].[Category].CurrentMember.Siblings,
[Measures].[Unit Sales]
)
'
select
{[Measures].[Unit Sales], [Measures].[Pct of Max Siblings]}
on axis(0),
{[Product].[Doing].Children} on axis (1)
from Sales
where [Time].[2005]
1)Max()對[Product].[Category]的子成員啟動迴圈,CurrentMember是每迴圈一次[Category]的一個成員引用,Siblings返回指定成員的同級,包括該成員本身
2)Max()每次迴圈的單元值為41,808。
例2.
上下文也有嵌套關係。通常情況下,一系列不同的公式同時執行時,會以嵌套上下文來結束。例如有這樣的分析需求:選出所包含的月份中各時期增長率至少為13%的季度。
select
filter([Time].[Quarter].members,
Max(
[Time].[YQMD].CurrentMember.Children,
([Time].[YQMD].CurrentMember
/[Time].[YQMD].CurrentMember.PrevMember)
)>=1.13
)
on axis(0)
from Sales
where ([Measures].[Unit Sales], [Product].[Tools])
過程分解如下:
1)Filter對所有季度啟動迴圈
2)Max()的第一個參數CurrentMember在這些季度上迴圈
3)附加的.Children在每個月上啟動迴圈。
4)Max()第二部分的比值運算式和Time.CurrentMember輪流設定每個月。
5)只有當Max()返回的值>=1.13時,則Max() >= 1.13為真。