Функции наборов

Функции наборов извлекают наборы из измерений, иерархий и уровней, либо путем обхода абсолютных и относительных мест расположения элементов в этих объектах, формируя набор различными способами.

Функции наборов, как и функции элементов или кортежей, имеют большое значение для согласования многомерных структур в службах Analysis Services. Они также важны для получения результатов многомерных выражений, поскольку выражения наборов определяют оси многомерных выражений.

Одной из наиболее распространенных функций набора является функция Members (Set) (Многомерные выражения), которая извлекает набор, содержащий все элементы из измерения, иерархии или уровня. Ниже приведен пример ее использования в запросе:

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 (многомерные выражения). Она возвращает набор кортежей, представляющий декартово произведение наборов, переданных в нее в качестве параметров. На практике эта функция позволяет создавать «вложенные» или «перекрестные» оси в запросах:

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]

Функция Потомков (многомерных выражений) аналогична функции Children , но более мощна. Она возвращает потомки любого элемента на одном и нескольких уровнях иерархии:

SELECT

[Measures].[Internet Sales Amount]

ON Columns,

//Возвращает набор, содержащий все даты под календарным годом

//2004 в иерархии «Календарь» измерения «Дата»

DESCENDANTS(

[Дата]. [Календарь]. [Календарный год].&&&;[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).

Фильтрация набора в соответствии с определенными критериями очень полезна при написании запросов, и для этой цели можно использовать функцию Фильтра (многомерные выражения ), как показано в следующем примере:

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 (многомерные выражения) возвращает верхние 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 (многомерные выражения), Union (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]

См. также

Функции (синтаксис многомерных выражений)
Использование функций элементов
Использование функций кортежей