Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 11.docx
Скачиваний:
8
Добавлен:
23.09.2019
Размер:
38.54 Кб
Скачать

Лекция 11

«Язык запросов mdx» Общий вид запроса

[WITH <formula_expression> [,<formula_expression>…]]

SELECT [<axis_expression> [,<axis_expression>…]]

FROM <cube_expression>

[WHERE <slicer_expression>]

Предложение where

Ограничивает набор результатов запроса по заданному критерию. В качестве критерия может указываться член измерения, множество.

Кортежи (множества), указанные на осях и после WHERE, образуют декартово произведение, которое и является результатом выполнения запроса.

Множества, входящие в кортеж после слова WHERE, называются Срезами (Slicers): (Slicer1, … , SlicerN).

Срезы могут включать и те оси куба, которые не указаны явно в предложении SELECT.

Если в оси среза определено несколько кортежей, то они будут обработаны, как множества, а их значения агрегированы.

WHERE ([Тип места].[Место жительства], [Measures].[Количество клиентов])

Пример запроса

Предположим, требуется получить сведения о ежемесячной перевозке пассажиров авиакомпанией «Орел» за январь и февраль 2000 года:

SELECT

{[Авиакомпания].[Орел]} ON COLUMNS,

{[2000].[Январь],[2000].[Февраль]} ON ROWS

FROM [Учет рейсов]

WHERE

[Measures].[Колво пасс]

В запросе указаны только измерения «Авиакомпания» и «Время». По измерениям «Тип самолета», «Пункт назначения» члены не были указаны, и было принято значение «По умолчанию» (уровень [All]). В этом случае по типам самолетов и городам назначения произведена агрегация значений. Запрос с учетом всех измерений имеет следующий вид:

SELECT

{[Авиакомпания].[Орел]} ON COLUMNS,

{[Январь],[Февраль]} ON ROWS

FROM [Учет рейсов]

WHERE

([Measures].[Колво пасс] ,

[Пункт назначения].[Все пункты],

[Тип самолета].[Все типы ])

Характерным отличием языка MDX от SQL является то, что результатом запроса всегда являются значения одной или нескольких мер. Невозможно получить значения измерений, оторванные от мер (фактов). Например, в случае трех наиболее напряженных по пассажиропотоку маршрутов (рис. 6) запрос имеет следующий вид.

SELECT {[Measures].[Колво пасс]} on columns, TopCount(ORDER (FILTER([Пункт назначения].Members, [Пункт назначения].CurrentMember.Level.Name =”Город”), [Пункт назначения].CurrentMember.Name, BASC), 3, ([Measures].[Колво пасс])) ON rowS FROM [Учет рейсов]

В результирующем наборе помимо перечисленных городов отображается и столбец мер.

Предложение with

Иногда требуется использование вычислений, которые должны быть сформулированы в рамках специфического запроса. Предложение WITH в запросе MDX предоставляет вам возможность выполнять такие вычисления в рамках запроса.

Типичными вычислениями, являются именованные наборы и вычисляемые члены. Рассмотрим именованные наборы, вычисляемые члены и вычисляемые размерности.

Выражение formula_expression варьируется в зависимости от типа вычислений.

Именованные наборы

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

Множество, для которого назначен псевдоним, называют именованным набором (named set). Такой псевдоним можно использовать в любом месте внутри запроса.

Предположим, что мы хотим извлечь информацию для клиентов, проживающих в Европе. В таком случае ваш запрос MDX может выглядеть следующим образом.

SELECT { ( { [Место].[Франция], [Место].[Германия], [Место].[Великобритания] }, { [Дата].[1970].[Февраль] } ) } ON COLUMNS,

FROM [Наш куб данных]

WHERE ([Тип места].[Место жительства])

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

WITH SET [EUROPE] AS '{ [Место].[Франция], [Место].[Германия], [Место].[Великобритания] } '

SELECT { ([EUROPE], { [Дата].[1970].[Февраль] } ) } ON COLUMNS,

FROM [Наш куб данных]

WHERE ([Тип места].[Место жительства])

Для именованного набора выражение formula_expression в предложении WITH выглядит следующим образом.

Formula_expression := SET <псевдоним_набора> AS [']<набор>[']

В качестве псевдонима можно использовать любое имя, которое обычно заключают в квадратные скобки. Одинарные кавычки используются для обеспечения обратной совместимости c Analysis Services 2000.