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