Как уже упоминалось, что в большинстве случаев в кортежах явно присутствуют не все измерения. Чтобы получить значение меры на кортеже, нужно учесть все прочие измерения. Для этого у каждого измерения существует член по умолчанию. Как правило, в роли Default Member выступает единственный член специального уровня иерархии [All], автоматически создаваемого при создании измерения. Этот уровень содержит совокупные результаты по всему измерению.
Пример:
([Клиенты].[All].Members, [Measures].[Максимальный возраст]) – этот кортеж возвращает возраст самого старшего клиента.
Эквивалентное указание на член по умолчанию можно записать короче и корректнее с помощью выражения DefaultMember:
[Клиенты].DefaultMember.
Если уровень [All] отсутствует, в его роли выступает первый член следующего уровня. Например, для нашего измерения Дата это будет [Дата].[1900], если в кубе нет более ранних годов.
В некоторых системах членом по умолчанию можно назначить любой член или MDX-выражение измерения.
Поскольку совокупность мер ([Measures]) тоже является одним из измерений, то и среди мер есть элемент по умолчанию.
|
|
Предположим, что в нашем случае мерой по умолчанию является [Количество клиентов]. Тогда, если из нашего запроса (*) удалить конструкцию WHERE ([Measures].[Количество клиентов]), результат его выполнения останется прежним.
Общий вид запроса
Простейший вид запроса MDX выглядит следующим образом:
SELECT <множество1> ON COLUMNS,
<множество2> ON ROWS
FROM <куб>
WHERE <кортеж>
На каждой из осей (columns, rows и др.) можно располагать несколько измерений, например:
SELECT { CrossJoin ({ [Место].[РФ].[Урюпинск] }, { [Дата].[1970].[Февраль] }) } ON COLUMNS,
{ [Клиенты].Children } ON ROWS
FROM [Наш куб данных]
WHERE ([Тип места].[Место жительства], [Measures].[Количество клиентов])
Этот запрос возвращает всех клиентов, проживающих в Урюпинске, родившихся в феврале 1970г.
Кортежи (множества), указанные на осях и после WHERE, образуют декартово произведение, которое и является результатом выполнения запроса.
Множества, входящие в кортеж после слова WHERE, называются Срезами (Slicers): (Slicer1, …, SlicerN).
Располагать члены одного измерения по разным осям отчета нельзя, такая операция лишена смысла.
Слово CrossJoin не несет логической нагрузки, оно лишь указывает на порядок вывода данных разных измерений.
Функции навигации