|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Язык Многомерных Выражений (Multidimensional Expressions, MDX)
Язык MDX был впервые представлен как составляющая OLE DB for OLAP в 1997г. компанией Microsoft. Несмотря на то, что MDX является не общим стандартом, а только внутренней спецификацией Microsoft, он был принят многими ведущими распространителями технологии OLAP. В их числе разработчики серверных приложений, такие, как Applix, Microstrategy, SAS, SAP, Whitelight, NCR, а также разработчики клиентских приложений: Panorama Software, Proclarity, AppSource, Cognos, Business Objects, Brio Technology, и другие. С появлением XML for Analysis, в котором MDX был принят как стандартный язык запросов, все большее число компаний (в их числе, например, Hyperion Solutions), стали поддерживать MDX. XML for Analysis обращается к OLE DB for OLAP с помощью языка запросов MDX.
Основные объекты многомерных баз данных Основные элементы структуры многомерных баз данных – Кубы (Cubes), Измерения (Dimensions) и Меры (Measures). Куб (Cube) — совокупность данных, имеющая многомерную структуру. Куб представлен набором мер и измерений. Измерений может быть много. Рассмотрим эти понятия на примере базы данных клиентов. Пусть наш куб содержит данные клиентов: ФИО, дату рождения, место рождения, пол, место жительства, а также календарь и список населенных пунктов. В случае реляционной базы данных можно было организовать 3 таблицы: [Населенные пункты], [Календарь] и [Паспортные данные]. В многомерном случае можно задать, например, такие измерения: [Клиенты], [Дата], [Место], [Тип места] (рождения или жительства), [Пол]. На пересечении этих измерений зададим некоторые агрегированные величины – меры. Например: [Количество клиентов], [Максимальный возраст]. Пример (*): Сколько клиентов мужского пола проживает в Твери? Ответ можно получить, задав следующий MDX-запрос:
SELECT { [Место].[РФ].[Тверь] } ON COLUMNS, { [Пол].[М] } ON ROWS FROM [Наш куб данных] WHERE ([Measures].[Количество клиентов], [Тип места].[Место жительства])
В данном запросе присутствуют 3 измерения: [Место], [Тип места] и [Пол]; все измерения, не указанные в запросе ([Клиенты] и [Дата]), присутствуют в нем неявно. Совокупность мер является, по сути, еще одним измерением. Синтаксис MDS очень похож на синтаксис SQL.
Члены измерений (Members). В рассмотренном выше примере мы пользовались измерением [Место], детализируя его с помощью заданной на нем иерархии. Делается это с помощью членов измерения, т.е. единиц описания на различных уровнях иерархии. Примеры членов измерения: [РФ], [Белоруссия], [Минск], [ул. Северная], [дом №70], [дом №95] и т.д До каждого члена можно «добраться», описав путь к нему по иерархической структуре. Наример: [Место]. [Иерархия_Место].[РФ].[Тверь]. [Петербургское шоссе].[дом №777].[квартира №8888], [Место]. [Иерархия_Место].[РФ].[Москва]
Кортежи (Tuples) и множества (Sets) Кортеж — это набор членов одного или нескольких разных измерений. Задавая кортеж, мы указываем на конкретную ячейку или набор ячеек внутри куба. Таким образом, кортеж – это декартово произведение (т.е. пересечение) множеств, определенных на различных измерениях куба. Кортежи задаются с помощью круглых скобок. Примеры: ([Место].[РФ].[Рязань].[улица Есенина], [Пол].[Ж], [Тип места].[Место жительства]) – все дамы с улицы Есенина в Рязани; В языке MDX пересечения множеств реализуются с помощью конструкций CrossJoin <Кортеж>, Where <Кортеж> и других, что обусловлено необходимостью представить результат в удобном для восприятия виде. Множество (или Набор) — это совокупность (объединение) кортежей, определенных с использованием одинакового количества одних и тех же измерений. Примеры:
{ [Дата].[1960].[Январь], [Дата].[1960].[Февраль] } – все клиенты, родившиеся в январе или в феврале 1960г.
Множество заключается в фигурные скобки. Пересечение кортежа или множества с какой-либо мерой дает значение меры на данном множестве. В первом разобранном нами примере (*) мы имели пересечение кортежа ([Место].[РФ].[Тверь], [Пол].[М]) с мерой [Measures].[Количество клиентов].
Член по умолчанию (default member) В большинстве случаев в кортежах явно присутствуют не все измерения. Чтобы получить значение меры на кортеже, нужно учесть все прочие измерения. Для этого у каждого измерения существует член по умолчанию. Как правило, в роли Default Member выступает единственный член специального уровня иерархии [All], автоматически создаваемого при создании измерения. Этот уровень содержит совокупные результаты по всему измерению. Пример: ([Клиенты].[All].Members, [Measures].[Максимальный возраст]) – этот кортеж возвращает возраст самого старшего клиента. Эквивалентное указание на член по умолчанию можно записать короче и корректнее с помощью выражения DefaultMember: [Клиенты].DefaultMember. Если уровень [All] отсутствует, в его роли выступает первый член следующего уровня. В некоторых системах членом по умолчанию можно назначить любой член или MDX-выражение измерения. Поскольку совокупность мер ([Measures]) тоже является одним из измерений, то и среди мер есть элемент по умолчанию. Предположим, что в нашем случае мерой по умолчанию является [Количество клиентов]. Тогда, если из нашего запроса (*) удалить конструкцию WHERE ([Measures].[Количество клиентов]), результат его выполнения останется прежним.
Функции навигации Members, AllMembers Members применяется к иерархиям или к уровням. PrevMember, NextMember Для перемещения в пределах одного уровня, используются функции PrevMember и NextMember: Children, Parent Для перемещения вверх и вниз по уровням используются функции Children и Parent: Функции FirstChild, LastChild возвращают первого (последнего) потомка данного элемента.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |