MDX中容易搞混的几个概念

元组:

可以直接理解为元素,或者可以理解为EXCEL中的单元格,而这个单元格一般来讲是两个或者两个以上的维度crosstab出来的。
例如

select [Measures].[Dollar Sales] on 0
from sales
where ([Time].[2004],[Product].[Tools])

就是统计2004年Tools产品类的数据。
个人理解的流程是,先把2004年Tools产品类的数据拿出来,配上各种维度(但是不含Time和Product维度了)。
相当于是提取了整个多维数据的一个子集出来进行统计,而这个子集也是一个多维数据。个人理解这个就是切片的概念。

Filter()

select filter(
    [Time].[Year].members, 
    ([Time].[2004], [Measures].[Sales Count])>=10000
) on 0,
    [Product].[Category].children on 1
from sales
where [Measures].[Sales Count]

filter第二个参数是个布尔表达式,是(元组)>=value的形式,所以可以是由多个维度组合的元组。
从([Time].[2004], [Measures].[Sales Count])>=10000也可以更进一步加深理解元组的概念:元组实际上是有多个条件crosstab出来的一个单元格数值。
([Time].[2004], [Measures].[Sales Count])是04年全年的sales count
([Time].[Q1, 2004], [Measures].[Sales Count])是04年Q1的sales count

Order()

select [Time].[Year].members on 0,
    order(
        {[Product].[Category].Members},
        ([Time].[2004], [Measures].[Sales Count]),
        DESC
    ) on 1
from sales
where [Measures].[Sales Count]

Order()第二个参数实际上是一个元组,相当于给第一个参数所指定的集合中增加了一列用于排序的字段,而这个排序字段是用第二个参数指定的元组的公式计算出来的。

原文地址:https://www.cnblogs.com/ifan/p/2839235.html