Создание решений на базе Microsoft Data Analyzer
В предыдущем номере КомпьютерПресс мы ознакомили читателей
с новым продуктом семейства 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 и выполним следующие действия:
- в панели New Project выберем тип приложения Standard Exe;
- добавим компонент ActiveX в палитру компонентов — для этого в палитре компонентов нажмем правую кнопку мыши и выберем команду Components;
- в диалоговой панели Components выберем Max3 ActiveX 3.0 Class Library (Max3ActiveX.dll)
и нажмем кнопку OK (рис. 1);
Рис. 1
- теперь компонент ActiveX доступен для использования, но прежде чем мы сможем обратиться к нему из нашей программы, мы должны добавить ссылку на библиотеку Max3API, выполнив команду Project | References;
- в диалоговой панели References мы выбираем Max3API (Max3API.dll) и нажимаем
кнопку OK (рис. 2).
Рис. 2
Загрузка существующих отображений
еперь мы можем перейти к написанию кода. Начнем с того, что поместим компонент 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).
Рис. 3
В данном примере мы использовали метод OpenView объекта ActiveView, к которому обратились через объект Application, обеспечивающий программный доступ к компоненту ActiveX. В табл. 1 показаны объекты и коллекции, предоставляемые объектной моделью Microsoft Data Analyzer.
Таблица 1
Объект/Коллекция | Описание |
---|---|
Application | Обеспечивает программный доступ к компоненту ActiveX Microsoft Data Analyzer |
Aspect | Представляет собой аспект отображения |
AspectMember | Представляет собой члена аспекта отображения |
AspectMembers | Представляет собой коллекцию всех членов аспекта отображения |
Aspects | Представляет собой коллекцию всех аспектов отображения |
Band | Представляет собой один элемент полосы команд |
Bands | Представляет собой коллекцию элементов полосы команд |
ColorManager | Обеспечивает программный доступ к менеджеру цветов |
History | Обеспечивает программный доступ к менеджеру ранее введенных команд |
Qualities | Представляет собой коллекцию качеств |
Toolbar | Представляет собой полосу команд |
Trait | Представляет собой либо цвет или качество, либо коллекцию цветов и качеств типа таблицы |
TraitsManager | Управляет коллекциями цветов и качеств |
View | Представляет собой отображение |
ViewQualities | Представляет собой коллекцию качеств отображения |
Перечисленные выше объекты и коллекции объединены в иерархию, показанную на рис. 4.
Рис. 4
Давайте расширим наш пример и добавим возможность вызова стандартных диалоговых панелей. Для этого мы будем использовать метод ShowDialog объекта Application. Данный метод позволяет вызвать одну из следующих диалоговых панелей (табл. 2).
Таблица 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.
Рис. 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.
КомпьютерПресс 4'2002