Вы находитесь на страницах старой версии сайта.
Переходите на новую версию Interface.Ru

СТАТЬЯ
14.02.03


Создание решений на базе Microsoft Data Analyzer

© Алексей Федоров
Статья была опубликована в "КомпьютерПресс" № 4'2002

В предыдущей статье "Microsoft Data Analyzer - анализ данных в Microsoft Office" мы ознакомили читателей с новым продуктом семейства Microsoft Office - Microsoft Data Analyzer, который представляет собой средство анализа данных, предназначенное для конечных пользователей, и существенно облегчает процесс извлечения информации из корпоративных хранилищ данных.

Microsoft Data Analyzer поддерживает обширную объектную модель, с помощью которой можно создавать решения на базе данного продукта. Вся функциональность доступна как через пользовательский интерфейс, так и через объектную модель Microsoft Data Analyzer, которой посвящена настоящая статья.

Объектная модель Microsoft Data Analyzer становится доступной при использовании компонента ActiveX, входящего в состав данного продукта. Этот компонент может использоваться в приложениях, поддерживающих COM-интерфейсы, — в приложениях на основе Windows Forms в Visual Basic, в VBA-приложениях Microsoft Office или в составе Web-страниц.

Компонент ActiveX обеспечивает программный доступ к следующим функциям Microsoft Data Analyzer:

Для того чтобы воспользоваться компонентом ActiveX, запустим Microsoft Visual Basic и выполним следующие действия:



Загрузка существующих отображений

Теперь мы можем перейти к написанию кода. Начнем с того, что поместим компонент ActiveX на форму. Перейдем в режим написания кода, выберем подпрограмму инициализации компонента (Max3Ax1_Initialized) и напишем следующий код:

Private Sub Max3Ax1_Initialized()
Const ViewName = "C:\Program Files\Microsoft Data Analyzer\" & _
"Data Analyzer 3.5\Airline.MAX"

With Max3Ax1.Application.ActiveView
.OpenView ViewName, vlocFileSystem
End With
End Sub

Выполнив данное приложение, мы увидим компонент ActiveX в действии — он отображает данные, загруженные из файла (рис. 3).

В данном примере мы использовали метод OpenView объекта ActiveView, к которому обратились через объект Application, обеспечивающий программный доступ к компоненту ActiveX. В табл. 1

Объект/Коллекция Описание
Application Обеспечивает программный доступ к компоненту ActiveX Microsoft Data Analyzer
Aspect Представляет собой аспект отображения
AspectMember Представляет собой члена аспекта отображения
AspectMembers Представляет собой коллекцию всех членов аспекта отображения
Aspects Представляет собой коллекцию всех аспектов отображения
Band Представляет собой один элемент полосы команд
Band Представляет собой коллекцию элементов полосы команд
ColorManager Обеспечивает программный доступ к менеджеру цветов
History Обеспечивает программный доступ к менеджеру ранее введенных команд
Qualities Представляет собой коллекцию качеств
Toolbar Представляет собой полосу команд
Trait Представляет собой либо цвет или качество, либо коллекцию цветов и качеств типа таблицы
TraitsManager Управляет коллекциями цветов и качеств
View Представляет собой отображение
ViewQualities Представляет собой коллекцию качеств отображения

показаны объекты и коллекции, предоставляемые объектной моделью Microsoft Data Analyzer.

Перечисленные выше объекты и коллекции объединены в иерархию, показанную на рис. 4.

Давайте расширим наш пример и добавим возможность вызова стандартных диалоговых панелей. Для этого мы будем использовать метод ShowDialog объекта Application. Данный метод позволяет вызвать одну из следующих диалоговых панелей (табл. 2).

Идентификаторм Код Панель
mxDlgAbout 1 About box
mxDlgOpenFile 2 Open view from file dialog
mxDlgSaveAsFile 3 Save view as file dialog
mxDlgHtmlReport 4 HTML report dialog
mxDlgNewView 5 New View Wizard
mxDlgChangeView 6 Change view dialog
mxDlgDrillThrough 7 Drill through
mxDlgExportToExcelPivotTable 8 Export to PivotTable Wizard
mxDlgOpenUsingConnection 9 Open view using connection dialog
mxDlgBusinessCenter 10 Open Business Center dialog
mxDlgExportToExcelStatic 11 Export to Microsoft Excel

 

Ниже показан код, необходимый для вызова диалоговой панели Change View, который мы поместим в обработчик события, возникающего при нажатии кнопки на форме:

Private Sub Command1_Click()
Max3Ax1.Application.ShowDialog Dialog:=mxDlgChangeView
End Sub

Для управления полосой команд, основным меню и статусной строкой мы используем объекты Bands и свойство Visible, которое может принимать значения True или False. Ниже показано, как отключить полосу команд, меню и статусную строку:

Dim ToolBar As Max3API.ToolBar

...

With ToolBar

.Bands(Index:="MainToolBar").Visible = False
.Bands(Index:="MainMenu").Visible = False
.Bands(Index:="Main.StatusBar").Visible = False

End With

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

Качеством называется единица измерения в отображении. Также существует разделение на тип измерения (длина или цвет). Ниже показано, как определить цвет для указанного качества:

Private Sub Command2_Click()

Dim TraitsManager As Max3API.TraitsManager
Set TraitsManager = Max3Ax1.Application.ActiveView.TraitsManager
MsgBox Prompt:= _
TraitsManager.Trait(TraitID:=trtColor).Qualities.QualityID(v:=0)

End Sub

Для добавления, удаления и очистки качеств мы можем использовать методы Add, Clear и Remove объекта Qualities.

Аспектом называется измерение в OLAP-кубе — время, местонахождение, продукты и т.п. Коллекция Aspects предоставляет методы Add, Remove и Clear для добавления, удаления и очистки измерений. Уникальное имя измерения указывается в квадратных скобках — “[]”.

Для управления менеджером цветов мы используем объект ColorManager и его свойство ColorScaleVisible, которое может принимать значения True или False. Ниже показано, как отобразить менеджера цветов на экране:

Dim ColorManager As Max3API.ColorManager

...

Set ColorManager = _
Max3Ax1.Application.ActiveView.TraitsManager.ColorManager
ColorManager.ColorScaleVisible = True

В приведенных выше примерах мы использовали готовое отображение, которое мы загружали из файла на локальном диске. Теперь давайте рассмотрим, как с помощью объектной модели Microsoft Data Analyzer создать новое отображение.

Создание новых отображений

Начнем с того, что создадим новое приложение на Visual Basic, добавим к главной форме кнопку. Напишем следующий код:

Option Explicit

Dim MaxApp As Max3API.Application

Private Sub Form_Load()
Set MaxApp = Max3Ax1.Application
End Sub

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

Для присоединения к серверу, каталогу и кубу мы используем метод Connect объекта View, который обеспечивает подключение к OLAP-серверу. В качества параметра этого метода передается строка соединения. Для задания куба мы используем свойства Catalog и Cube объекта View. В нашем примере мы будем использовать куб Sales, который поставляется в составе Microsoft Analysis Services 8.0. Ниже показан код, который обеспечивает соединение с этим кубом. Данный код должен быть расположен в обработчике события Click кнопки:

MaxApp.ActiveView.Connect “location= _
localhost;provider=msolap”
MaxApp.ActiveView.Catalog = “Foodmart 2000”
MaxApp.ActiveView.Cube = “Sales”

Следующий шаг — описание качеств нового вида. Для этого мы будем использовать объект TraitsManager, который доступен через свойства TraitsManager объекта View. Используя метод Trait объекта TraitsManager, мы создаем новые объекты типа Trait. Каждый такой объект описывает либо единичное качество (длина или измерение) — для этого мы используем метод SetSingleQuality этого объекта, — либо мульти-качество. В последнем случае качества добавляются в коллекцию Qualities объекта Trait.

Для добавления качеств напишем следующий код, который добавим к уже существующему коду в обработчике события Click кнопки:

With MaxApp.ActiveView.TraitsManager

.Trait(trtLength).SetSingleQuality qtypMeasure, _
"[Measures].[Unit Sales]"
.Trait(trtColor).SetSingleQuality qtypMeasure, _
"[Measures].[Sales Average]"
.Trait(trtGrid).Qualities.Add qtypMeasure, "[Measures].[Store Sales]"

End With

Теперь мы должны добавить аспекты, которые, как мы помним, являются измерениями в OLAP-кубе. Для этого мы будем использовать коллекцию Aspects, доступную через свойство Aspects объекта View. Новый аспект добавляется с помощью метода Add. Первый параметр этого метода — уникальный идентификатор в иерархии, заданной в OLAP-кубе. Второй параметр — опциональный — по умолчанию аспект заполнения членами. Если второй параметр имеет значение False, будет создан пустой аспект, не содержащий членов.

Метод Item создает новый объект типа Aspect, который позволяет выполнять определенные операции на уровне аспектов. Например, метод GotoLevel заменяет член данного аспекта на члены указанного OLAP-уровня.

Для добавления нового аспекта напишем следующий код, который добавим к уже существующему коду в обработчике события Click кнопки:

With MaxApp.ActiveView.Aspects

.Add "[Time]"
.Item("[Time]").GotoLevel "[Time].[Quarter]"

End With

Для фильтрации членов аспекта мы можем использовать фильтры, задаваемые с помощью методов SmartSelectXXX. Возможно задание фильтров по качеству, по имени члена или по свойствам члена. В следующем примере мы создадим еще один аспект — Customers и используем фильтр для отображения первых 10 городов:

With MaxApp.ActiveView.Aspects

.Add "[Customers]"
.Item("[Customers]").SmartSelectByQuality "[Customers].[City]", _
ssopExclude, _
qtypMeasure, _
"[Measures].[Unit Sales]", _
ssorInTop, _
10, _
"", _
False

End With

Последним шагом в нашем примере будет описание среза. Создадим еще один аспект: Products, отфильтруем его по категории Drink и сминимизируем его:

With MaxApp.ActiveView.Aspects

.Add "[Product]"
.Item("[Product]").SelectOnly "[Product].[All Products].[Drink]"
.Item("[Product]").Minimized = True

End With

Результат работы нашего демонстрационного приложения показан на рис. 5.

В завершение данного обзора давайте кратко рассмотрим объекты Microsoft Data Analyzer, которые можно использовать для просмотра метаданных.

Создание новых отображений на основе метаданных

Начнем с того, что добавим к нашему проекту ссылку на библиотеку типов MdhInterfacesLib (для этого надо загрузить файл MdhInterfaces.tlb). Теперь создадим объект типа MdhInterfacesLib.IMdhManager, который мы будем использовать для доступа к метаданным. Метод MetaData объекта View возвращает объект этого типа для текущего отображения. Коллекция Cubes объекта IMdhManager возвращает метаданные о кубах, метод MeasureDimension объекта Cube (тот, что мы можем извлечь из коллекции Cubes) возвращает объект, который может быть использован как обычное измерение.

Метод DefaultHierarchy объекта MeasureDimension может использоваться для получения объекта, содержащего иерархию измерения. Метод DefaultMember используется для получения измерения по умолчанию. Метод Dimensions объекта Cube служит для получения коллекции измерений.

В следующем примере показано, как использовать метаданные для построения нового отображения, содержащего все измерения в кубе Sales, который поставляется в составе Microsoft Analysis Services 8.0:

Option Explicit

Dim MaxApp As Max3API.Application

Private Sub Command1_Click()

MaxApp.ActiveView.Connect "location=localhost;provider=msolap"
MaxApp.ActiveView.Catalog = "Foodmart 2000"
MaxApp.ActiveView.Cube = "Sales"

Dim mdh As MdhInterfacesLib.IMdhManager
Dim mdhCube As MdhInterfacesLib.IMdhCube
Dim mdhMeasures As MdhInterfacesLib.IMdhDimension
Dim mdhDimension As MdhInterfacesLib.IMdhDimension
Dim i As Integer

Set mdh = MaxApp.ActiveView.MetaData
Set mdhCube = mdh.Cubes.Item(MaxApp.ActiveView.Cube)
Set mdhMeasures = mdhCube.MeasuresDimension

MaxApp.ActiveView.TraitsManager.Trait(trtLength).SetSingleQuality _
qtypMeasure, mdhMeasures.DefaultHierarchy.DefaultMember.UniqueName

For i = 0 To mdhCube.Dimensions.Count - 1

Set mdhDimension = mdhCube.Dimensions.Item(i)
If mdhDimension.Type <> MDH_DIM_TYPE_MEASURE Then
MaxApp.ActiveView.Aspects.Add _
mdhDimension.DefaultHierarchy.UniqueName
End If

Next i

End Sub

Private Sub Form_Load()

Set MaxApp = Max3Ax1.Application

End Sub

Заключение

В данном обзоре мы ознакомились с основными возможностями компонента ActiveX и объектной модели Microsoft Data Analyzer. Мы узнали, как использовать объекты для загрузки уже существующего отображения, а также рассмотрели два способа создания новых отображений: с помощью объектной модели Microsoft Data Analyzer и с помощью объектов, обеспечивающих доступ к метаданным.

В заключение отметим, что компонент ActiveX Microsoft Data Analyzer может также использоваться в приложениях, написанных на Visual Basic for Applications (VBA), позволяя добавлять средства исследования корпоративных хранилищ данных в решения, создаваемые на основе продуктов Microsoft Office, а также в Web-сайтах в составе Microsoft SharePoint.

Дополнительная информация

За дополнительной информацией обращайтесь в компанию Interface Ltd.

Обсудить на форуме Microsoft

Рекомендовать страницу

INTERFACE Ltd.
Телефон/Факс: +7 (495) 925-0049
Отправить E-Mail
http://www.interface.ru
Rambler's Top100
Ваши замечания и предложения отправляйте редактору
По техническим вопросам обращайтесь к вебмастеру
Дата публикации: 14.02.03