使用集函数

集函数从维度、层次结构、级别中检索集,或通过遍历这些对象中的成员的绝对位置和相对位置来检索集,从而以多种方法构造集。

与成员函数和元组函数一样,集函数对协商 Analysis Services 中的多维结构至关重要。 集函数对获得多维表达式 (MDX) 查询结果也很重要,因为集表达式定义了 MDX 查询的轴。

最常用的一个集函数是 Members(集)(MDX) 函数,它从维度、层次结构或级别中检索包含所有成员的集。 以下是该函数在查询中的用法示例:

SELECT

//Returns all of the members on the Measures dimension

[Measures].MEMBERS

ON Columns,

//Returns all of the members on the Calendar Year level of the Calendar Year Hierarchy

//on the Date dimension

[Date].[Calendar Year].[Calendar Year].MEMBERS

ON Rows

FROM [Adventure Works]

另一个常用的函数是 Crossjoin (MDX) 函数。 它返回元组的集,表示作为参数传递到该函数的集的笛卡尔积。 实际上,利用此函数可以在查询中创建“嵌套”轴或“交叉表”轴:

SELECT

//Returns all of the members on the Measures dimension

[Measures].MEMBERS

ON Columns,

//Returns a set containing every combination of all of the members

//on the Calendar Year level of the Calendar Year Hierarchy

//on the Date dimension and all of the members on the Category level

//of the Category hierarchy on the Product dimension

Crossjoin(

[Date].[Calendar Year].[Calendar Year].MEMBERS,

[Product].[Category].[Category].MEMBERS)

ON Rows

FROM [Adventure Works]

Descendants (MDX) 函数与 Children 函数类似,但其功能更强大。 它返回层次结构中一个或多个级别任何成员的后代:

SELECT

[Measures].[Internet Sales Amount]

ON Columns,

//返回一个集,该集包含 Date 维度的 Calendar 层次结构中 Calendar Year

//2004 下的所有日期

DESCENDANTS(

[Date].[Calendar].[Calendar Year].&[2004]

, [Date].[Calendar].[Date])

ON Rows

FROM [Adventure Works]

利用 Order (MDX) 函数可以根据特定的数值表达式按升序或降序对集的内容进行排序。 以下查询返回的行成员与前一查询返回的行成员相同,但现在按 Internet Sales Amount 度量值对这些成员进行排序:

SELECT

[Measures].[Internet Sales Amount]

ON Columns,

//Returns a set containing all of the Dates beneath Calendar Year

//2004 in the Calendar hierarchy of the Date dimension

//ordered by Internet Sales Amount

ORDER(

DESCENDANTS(

[Date].[Calendar].[Calendar Year].&[2004]

, [Date].[Calendar].[Date])

, [Measures].[Internet Sales Amount], BDESC)

ON Rows

FROM [Adventure Works]

此查询还说明如何将从一个集函数 Descendants 返回的集作为参数传递到另一个集函数 Order。

按照某一标准筛选集在编写查询时非常有用,为此,您可以使用 Filter (MDX) 函数,如以下示例所示:

SELECT

[Measures].[Internet Sales Amount]

ON Columns,

//Returns a set containing all of the Dates beneath Calendar Year

//2004 in the Calendar hierarchy of the Date dimension

//where Internet Sales Amount is greater than $70000

FILTER(

DESCENDANTS(

[Date].[Calendar].[Calendar Year].&[2004]

, [Date].[Calendar].[Date])

, [Measures].[Internet Sales Amount]>70000)

ON Rows

FROM [Adventure Works]

另外,存在允许您以其他方式筛选集的更复杂的函数。 例如,以下查询说明 TopCount (MDX) 函数返回集中的前 n 项:

SELECT

[Measures].[Internet Sales Amount]

ON Columns,

//Returns a set containing the top 10 Dates beneath Calendar Year

//2004 in the Calendar hierarchy of the Date dimension by Internet Sales Amount

TOPCOUNT(

DESCENDANTS(

[Date].[Calendar].[Calendar Year].&[2004]

, [Date].[Calendar].[Date])

,10, [Measures].[Internet Sales Amount])

ON Rows

FROM [Adventure Works]

最后,可以使用 Intersect (MDX)Union (MDX)Except (MDX) 等函数执行许多逻辑集运算。 以下查询说明后两个函数的示例:

SELECT

//Returns a set containing the Measures Internet Sales Amount, Internet Tax Amount and

//Internet Total Product Cost

UNION(

{[Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount]}

, {[Measures].[Internet Total Product Cost]}

)

ON Columns,

//Returns a set containing all of the Dates beneath Calendar Year

//2004 in the Calendar hierarchy of the Date dimension

//except the January 1st 2004

EXCEPT(

DESCENDANTS(

[Date].[Calendar].[Calendar Year].&[2004]

, [Date].[Calendar].[Date])

,{[Date].[Calendar].[Date].&[915]})

ON Rows

FROM [Adventure Works]

请参阅

概念

函数(MDX 语法)

使用成员函数

使用元组函数