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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вычисляемые члены

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

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

Formula_expression := MEMBER <ИмяЧлена> AS [']<Выражение_MDX>[']

ИмяЧлена — это полностью определенное имя члена, которое включает измерение, иерархию и уровень, для которого необходимо создать вычисляемый член.

Выражение Выражение_MDX должно возвращать значение, которое соотносится с членом.

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

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

Итак, имеются данные для решения задач анализа результатов работы аэропорта. В этом случае будут анализироваться пассажиро- и грузопотоки, поэтому в качестве мер (показателей) куба «Учет рейсов» будут фигурировать данные о количестве пассажиров и весе перевозимых авиалайнерами грузов. Предположим, что экономической службе аэропорта требуются сравнительные отчеты общих объемов ежемесячных и квартальных перевозок, а также возможность сопоставлять объемы перевозок различных авиакомпаний. Кроме того, для организации более логичного распределения грузоперевозок представляют интерес и географический анализ, и сравнительные данные различных типов самолетов. Таким образом, в куб включаются следующие измерения и меры:

Измерения: Авиакомпания, Пункт назначения, Время, Тип самолета;

Меры: Кол-во пасс, Вес груза.

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

SELECT

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

{[Время].[ Все время].[2010].[Январь],

[Время].[ Все время]. [2010].[Февраль]} ON ROWS

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

WHERE

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

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

Запрос с учетом всех измерений имеет следующий вид:

SELECT

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

{[Время].[ Все время].[2010].[Январь],

[Время].[ Все время].[2010].[Февраль]} ON ROWS

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

WHERE

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

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

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

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

SELECT { ( { [Пункт назначения]. [Все пункты].[Франция], [Пункт назначения]. [Все пункты].[Германия], [Пункт назначения]. [Все пункты].[Великобритания],... }, { [Время].[ Все время] .[1970].[Февраль] } ) } ON COLUMNS

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

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

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

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

SELECT { ([EUROPE], { [Время].[ Все время] .[1970].[Февраль]})} ON COLUMNS

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

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

7. Измерения и факты в многомерной модели данных. Схема «звезда» и схема «снежинка»

Структура такой базы данных для многомерной модели не будет реляционной - это будет пространственная база данных с целью анализа данных, а не выполнения транзакций. Моделирование размерностей сходно с моделированием связей и сущностей для реляционной модели, но отличаются целями: реляционная модель акцентируется на целостности и эффективности ввода данных.