Поделиться через


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

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

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

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

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]

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

SELECT

[Measures].[Internet Sales Amount]

ON Columns,

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

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

DESCENDANTS(

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

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

ON Rows

FROM [Adventure Works]

Функция 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

//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 (многомерные выражения), как показано в следующем примере:

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 (многомерные выражения) и Except (многомерные выражения). Следующий запрос показывает использование двух последних функций:

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]