logo search
Диплом(в)-1

1.3 Технологии аналитической обработки данных в среде .Net

Cуществует два способа получения данных из OLAP-кубов Microsoft SQL Server 2000 Analysis Services. Первый основан на применении ADO (ActiveX Data Objects) и OLEDB-провайдера для доступа к многомерным данным — Microsoft OLE DB Provider for OLAP Services 8.0. При втором способе используется ADO MD (ADO Multidimensional) — технология, позволяющая обращаться как к метаданным многомерных баз данных, так и к результатам MDX-запросов.

ADO.NET — это набор библиотек, поставляемый с Microsoft .NET Framework и предназначенный для взаимодействия с различными хранилищами данных из .NET- приложений. Библиотеки ADO.NET включают классы для подсоединения к источнику данных, выполнения запросов и обработки их результатов. Кроме того, ADO.NET можно использовать в качестве надежного, иерархически организованного, отсоединенного кэша данных для автономной работы с данными. Главный отсоединенный объект, DataSet, позволяет сортировать, осуществлять поиск, фильтровать сохранять отложенные изменения и перемещаться по иерархичным данным. Кроме того, объект DataSet включает ряд функций, сокращающих разрыв между традиционным доступом к данным и программированием с использованием XML. Теперь разработчики получили возможность работать с XML-данными через обычные интерфейсы доступа к данным и наоборот.

ADO.NET объединяет в себе вес лучшие стороны своих предшественниц и реализует функции, наиболее часто требуемые разработчикам: расширенную поддержку XML, упрощенный доступ к отсоединенным данным, расширенные возможности управления обновлениями и повышенную гибкость обновлений.

Назначение ADO.NET — помогать разработке эффективных многоуровневых приложений для работы с БД в интрасетях и Интернете, для чего она и предоставляет все необходимые средства.

На рисунке 1.3.1 показаны классы, составляющие объектную модель ADO.NET. Пунктирная линия делит модель на две части. Объекты в левой части называются подсоединенными (connected). Для управления соединением, транзакциями, выборки данных и передачи изменений они взаимодействуют непосредственно с БД. Объекты в правой части называются отсоединенными (disconnected), они позволяют работать с данными автономно.

Объекты, составляющие отсоединенную часть модели ADO.NET не взаимодействуют напрямую с подсоединенными объектами. Это - значительное отличие от предыдущих объектных моделей доступа к данным Microsoft. В ADO объект Recordset хранит результаты запросов. Можно вызвать его метод Open, чтобы выбрать результаты запроса, и затем с помощью метода Update (или UpdateBatch) передать изменения из Recordset в БД.

Рисунок 1.3.1 – Иерархия объектов ADO.NET

Объект DataSet ADO.NET (подробнее о нем — далее) по функциональности сравним с объектом Recordset ADO. Тем не менее, DataSet не взаимодействует с БД. Для выборки данных из БД в объект DataSet последний передают методу Fill подсоединенного объекта ADO.NET — DataAdapter. Аналогичным образом для передачи отложенных изменений из DataSet в БД объект DataSet нужно передать методу DataAdapter.Update.

Поставщик данных .NET — это набор классов, предназначенных для взаимодействия с хранилищем данных определенного типа. .NET Framework включает два поставщика — SQL Client .NET Data Provider и OLE DB .NET Data Provider. Поставщик OLE DB .NET Data Provider позволяет взаимодействовать с различными хранилищами данных посредством поставщика OLE DB. Поставщик SQL Client .NET Data Provider рассчитан исключительно на взаимодействие с БД SQL Server версии 7 или более поздней.

Объектная модель ADO.NET включает классы, предназначенные для непосредственного взаимодействия с источником данных. Такие объекты, показанные на рисунке 1.3.1 слева от пунктирной линии, будем называть подсоединенными. Большинство из них представляют базовые концепции доступа к данным, например физическое соединение с БД, запрос и результаты запроса. Объект Connection представляет соединение с источником данных. С помощью свойств этого объекта можно задать тип источника, его расположение и другие атрибуты. Объект Connection примерно эквивалентен объекту Connection ADO и объекту Database DAO, он применяется для соединения и отсоединения от БД. Connection выступает в качестве канала, по которому другие объекты, например DataAdapter и Command, взаимодействуют с БД для передачи изменений и выборки их результатов.

Объекты Command по структуре аналогичны объектам Command RDO и QueryDef DАО. Они могут представлять запрос к БД, вызов хранимой процедуры или прямой запрос на возврат содержимого конкретной таблицы. БД поддерживают множество разных типов запросов. Одни запросы возвращают записи данных, ссылаясь на одну или несколько таблиц, представлений или вызывая хранимую процедуру. Другие запросы изменяют записи данных, а все прочие — управляют структурой БД, создавая и изменяя такие объекты как таблицы, представления и хранимые процедуры. С помощью объекта Command удается выполнить любой из этих запросов к БД.

Объект DataAdapter представляет новую концепцию моделей доступа к данным Microsoft; у него нет близкого эквивалента в ADO и DАО, хотя объекты Command ADO и QueryDef DAO можно считать его двоюродными братьями.

DataAdapter — это своеобразный мост между БД и отсоединенными объектами модели ADO.NET. Метод DataAdapter Fill предоставляет эффективный механизм выборки результатов запроса в объект DataSet или DataTable для последующей автономной работы с ними. Кроме того, объекты DataAdapter позволяют передавать отложенные изменения из объектов DataSet в БД.

Объектная модель ADO.NET включает классы, предоставляющие возможность сортировать данные, выполнять поиск, фильтровать или изменять результаты запросов. Они выступают в качестве автономного кэша данных. Выбрав результаты запроса в объект DataTable (подробнее о нем — чуть далее), можно закрыть соединение с источником данных и продолжить работу с данными. Как уже говорилось, этим объектам не требуется живое соединение с источником данных, и поэтому они называются отсоединенными (disconnected objects).

Давайте рассмотрим отсоединенные объекты модели ADO.NET.

Объект DataTable ADO.NET аналогичен объектам Recordset ADO и DAO. Он позволяет просматривать данные в виде наборов записей и столбцов. Чтобы поместить результаты запроса в объект DataTable, применяют метод DataAdapter Fill. Данные, выбранные из БД и помещенные в объект DataTable, считаются отсоединенными от сервера. Содержимое DataTable можно просматривать, не генерируя сетевого трафика между ADO.NET и БД. При автономной работе с данными живое соединение с БД не требуется, но помните: вы также не увидите изменений, внесенных другими пользователями после того, как вы выполнили исходный запрос.

Класс DataTable содержит наборы других отсоединенных объектов, которые рассмотриваются в последующих разделах. Для обращения к содержимому DataTable используют свойство Rows, которое возвращает набор объектов DataRow. Класс DataTable также позволяет определять на своем содержимом различные ограничения, например первичный ключ. Обращаться к этим ограничениям можно посредством свойства Constraints объекта DataTable. У каждого объекта DataTable есть набор Columns, представляющий собой контейнер объектов DataColumn. Как видно из его названия, объект DataColumn соответствует столбцу таблицы. Тем не менее в действительности DataColumn содержит не данные, хранящиеся в объекте DataTable, а информацию о структуре столбца.Такая разновидность информации называется метаданными (metadata). Например, объект DataColumn предоставляет свойство Туре, описывающее тип данных (скажем, string или integer) столбца. У DataColumn также есть другие свойства, например Readonly, AHowDBNutt, Unique, Default и Autolncrement, позволяющие управлять порядком обновления данных столбца, ограничить диапазон допустимых значений поля и определить порядок генерации значений для новых записей данных.

Обратиться к реальным значениям, хранящимся в объекте DataTable, позволяет набор Rows, содержащий объекты DataRow. Чтобы просмотреть содержимое конкретного поля определенной записи, воспользуйтесь свойством объекта DataRow и считайте значение нужного поля. Класс DataRow предоставляет несколько перегруженных определений свойства Item. Выбрать поле для просмотра можно, передав свойству Item объекта DataRow имя, порядковый номер или сопоставленный с полем объект DataColumn. Item — свойство объекта DataRow по умолчанию, и поэтому его разрешается использовать неявно. Объект DataRow является также отправной точной обновления. Например, можно вызвать метод DataRowBeginEdit, изменить посредством свойства Item значение одного из полей записи и затем вызвать метод EndEdit, чтобы сохранить сделанное изменение. Метод CancelEdit объекта DataRow отменяет все изменения, сделанные за текущий сеанс редактирования. Кроме того, DataRow предоставляет методы для удаления элементов из набора Rows. Когда вы изменяете содержимое записи, DataRow кэширует эти изменения,чтобы позже передать их в БД. Таким образом, при изменении значения поля записи DataRow хранит оригинальное и текущее значения поля, что обеспечивает успешное обновление содержимого БД. При наличии отложенных изменений свойство Item объекта DataRow позволяет просматривать оригинальные значения полей.

ADO MD — это расширение ADO, реализованное в библиотеке msadomd.dll и содержащее объектную модель, позволяющую обращаться как к метаданным многомерных баз данных, так и к результатам MDX-запросов.

Объектная модель ADO MD, представленная на рисунке 1.3.2, состоит из двух «ветвей» объектов: первая из них используется для доступа к метаданным многомерной базы данных, а вторая — для извлечения данных с помощью запросов к OLAP-кубам.

Рисунок 1.3.2 - Объектная модель ADO MD

Первый из объектов ADO MD для доступа к метаданным, объект Catalog, представляет многомерное хранилище данных, которое может содержать ноль, один или более кубов. Следовательно, одним из свойств объекта Catalog является коллекция CubeDefs. Каждый элемент этой коллекции представляет собой объект CubeDef, описывающий конкретный куб в хранилище. Имя куба — это значение свойства Name соответствующего объекта CubeDef.

Каждый объект CubeDef может содержать коллекцию Dimensions, состоящую из объектов Dimension. Каждый объект Dimension, в свою очередь, представляет конкретное измерение куба, а имя этого измерения содержится в свойстве Name.

Все объекты Dimension заключают в себе коллекцию Hierarchies, которая может содержать один или более объектов Hierarchy. Иерархия же может содержать один или несколько уровней, поэтому объект Hierarchy содержит коллекцию Levels, состоящую из объектов Level. Каждый из уровней иерархии содержит один или более членов, поэтому объект Level содержит коллекцию Members, состоящую из объектов Member.

ADOMD.NET выступает в качестве моста между приложением и источником данных. Однако ADOMD.NET отличается от остальных поставщиком данных платформы .NET Framework тем, что он работает с аналитическими данными. Чтобы работать с аналитическими данными, компонент ADOMD.NET обладает функциями, которые значительно отличаются от функций других поставщиков данных платформы .NET Framework. ADOMD.NET позволяет не только получать данные, но и метаданные, а также изменять структуру источника аналитических данных.

Получение метаданных

Получив метаданные при помощи наборов строк схемы или модели объекта, приложения могут узнать больше о тех данных, которые можно извлечь из источника данных. Получить можно такие сведения, как типы доступных ключевых индикаторов производительности, измерения в кубе и параметры, которые требуются модели интеллектуального анализа данных. Наибольшее значение метаданные имеют для динамических приложений, которым для определения типа, глубины и области действия получаемых данных требуется ввод пользователя. Среди таких приложений Query Analyzer, Microsoft Excel и другие средства запросов. Метаданные менее значимы для статических приложений, выполняющих набор стандартных действий.

Для решения сложных задач извлечения метаданных из источников аналитических данных компонент ADOMD.NET предоставляет две формы получения метаданных:

  1. Модель объектов

Использовать модель объектов компонента ADOMD.NET в целом проще, чем наборы строк схемы. В большинстве случаев для доступа к метаданным различных объектов базы данных достаточно воспользоваться моделью объектов. Доступ к модели объектов компонента ADOMD.NET можно получить через AdomdConnection.

  1. Наборы строк схемы

Полным, но и более сложным вариантом извлечения метаданных является использование наборов строк схемы. Набор строк схемы является набором строк OLE DB, который инкапсулирует в себя описание всех объектов определенного типа в базе данных. Сведения схемы в источнике аналитических данных включают базы данных или каталоги, доступные из этого источника данных, кубы и модели интеллектуального анализа в базе данных, роли, существующие для кубов в источнике данных и так далее. Эти метаданные можно получить при помощи метода GetSchemaDataSet, передав ему либо идентификаторGUID, либо имя XML для аналитики.

Получение данных

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

Установив соединение и создав запрос, можно начать извлечение данных. В ADOMD.NET извлекать данные можно при помощи трех разных объектов (CellSet,AdomdDataReaderиSystem.Xml.XmlReader) путем вызова одного из методовExecute объекта AdomdCommand.

Изменение структуры аналитических данных

Компонент ADOMD.NET также можно использовать, чтобы фактически изменять структуру хранилища аналитических данных. И хотя обычно это делается с помощью модели объектов AMO, компонент ADOMD.NET можно использовать для отправки команд на языке сценариев служб Analysis Services (язык ASSL), чтобы создавать, изменять или удалять объекты на сервере.

Установив соединение с источником аналитических данных, с помощью объекта AdomdCommandможно выполнять команды в этом источнике данных, и возвращать из него результаты. Эти команды могут получать данные при помощи многомерных выражений, расширений интеллектуального анализа данных или даже ограниченного синтаксиса SQL.

Таким образом, при работе с аналитической базой данных стандартные приложения ADOMD.NET обычно выполняют одну и ту же последовательность операций.

Сначала при помощи объекта AdomdConnectionустанавливается соединение с базой данных. При открытии соединения объектAdomdConnectionвыдает метаданные о том сервере, с которым установлено соединение. В динамических приложениях часть этих сведений обычно показывается пользователю с тем, чтобы он мог выбрать, например, к какому кубу выполнять запрос. Приложение может использовать соединение, созданное на этом этапе, повторно, что сокращает издержки.

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

Теперь приложение выполняет команду на сервере. Целью выполнения команды может быть получение дополнительных метаданных, получение данных или изменение структуры базы данных. Для любой из этих задач приложение может использовать ранее определенный запрос, либо создать дополнительные запросы, воспользовавшись только что полученными данными.

Получив команду, сервер начинает возвращать клиенту метаданные или данные. Просмотреть эти сведения можно при помощи объекта CellSet, объектаAdomdDataReaderили объекта System.XmlReader.