Версия для печатиСоздание решений на базе 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);
  • теперь компонент ActiveX доступен для использования, но прежде чем мы сможем обратиться к нему из нашей программы, мы должны добавить ссылку на библиотеку Max3API, выполнив команду Project | References;
  • в диалоговой панели References мы выбираем Max3API (Max3API.dll) и нажимаем кнопку OK (рис. 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).

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

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

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

Ниже показан код, необходимый для вызова диалоговой панели 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.

КомпьютерПресс 4'2002