
Общий вид запроса
Простейший вид запроса MDX выглядит следующим образом:
[WITH <formula_expression> [,<formula_expression>…]]
SELECT [<axis_expression> [,<axis_expression>…]]
FROM <cube_expression>
[WHERE <slicer_expression>]
Предложения WITH и WHERE являются необязательными.
Простейший запрос выглядит так:
SELECT
FROM <имя_куба>
Результатом данного запроса будет значение, полученное путем агрегации значений всех ячеек куба для заданных по умолчанию значений каждого измерения куба.
Инструкция select
Используется для извлечения подмножества многомерных данных из сервера OLAP.
В SQL это были столбцы, но там две оси, а у нас многомерная модель. То есть и запрос, и результат многомерны.
Выражение axis_expression ссылается на измерение, предоставляющее те данные, которые вы желаете извлечь. Представляемые этим выражением данные проецируются на соответствующие оси.
То есть выражение представляет собой следующую запись:
axis_expression ::= <set> ON Axis <номер_оси>
Язык MDX предоставляет возможность указать до 128 осей в предложении SELECT – с помощью слова Axis, за которым следует номер. Первые пять осей имеют псевдонимы – COLUMNS, ROWS, PAGES, SECTIONS, CHAPTERS.
Оси, по которым мы располагаем результаты MDX-запроса, не обязательно должны совпадать с измерениями куба. Мы можем расположить несколько измерений по одной оси, получив тем самым их декартово произведение. Например, для каждой авиакомпании будут перечислены все типы самолетов, вошедших в результаты запроса. Следовательно, нам необходимо в тексте запроса осуществить привязку множеств к конкретным осям отчета. Несмотря на то что Analysis Services позволяет возвращать истинно многомерные наборы данных, для простоты визуализации требуются, как правило, лишь плоские представления. Обычно используются лишь оси столбцов и строк:
В общем случае результирующий набор может быть многомерным (добавляются оси страниц, разделов, секций).
Каждой оси присваивается номер:
x-axis=0; y-axis=1; z-axis=2…
Общий вид запроса и его графическое представление, иллюстрирующее размещение данных на нескольких осях, представлены на рис. 8:
Нельзя располагать одно и то же измерение по разным осям отчета, поскольку такая операция лишена смысла.
На каждой из осей (columns, rows и др.) можно располагать несколько измерений, например:
SELECT { CrossJoin ( { [Место].[РФ].[Урюпинск] }, { [Дата].[1970].[Февраль] } ) } ON COLUMNS,
{ [Клиенты].Children } ON ROWS
Этот запрос возвращает всех клиентов, проживающих в Урюпинске, родившихся в феврале 1970г.
В MDX нельзя создать вопрос, в котором опущены оси с низшими порядковыми номерами.
Предложение from
Определяет куб, из которого извлекаются данные для анализа. Это предложение обязательно для любого запроса.
Выражение <cube_expression> означает имя куба или подраздела куба, из которого извлекаются данные. Извлечение данных возможно только из одного куба
однако есть способ получать данные из нескольких кубов сразу
FROM [Наш куб данных]