Модули персонализации служб Analysis Services
Модули персонализации служб SQL ServerAnalysis Services лежат в основе архитектуры подключаемых модулей. С помощью архитектуры подключаемых модулей можно динамически разрабатывать новые объекты кубов и функциональность и легко обмениваться ими с другими разработчиками. Модули персонализации служб Analysis Services предоставляют функциональность, позволяющую добиться следующего.
Динамическое проектирование и разработка. Сразу после создания и развертывания модулей персонализации служб Analysis Services, с началом первого же пользовательского сеанса пользователи получают доступ к их объектам и функциональности.
Независимость интерфейсов. Независимо от того, какой интерфейс использовался при создании модулей персонализации служб Analysis Services, пользователи могут получать доступ к объектам и функциональности с помощью любого интерфейса.
Контекст сеанса. Модули персонализации служб Analysis Services не являются постоянными объектами в существующей инфраструктуре и не требуют куба для повторной обработки. Они создаются для пользователя, когда он подключается к базе данных, и остаются доступными на протяжении пользовательского сеанса.
Быстрое распространение. Можно обмениваться модулями персонализации служб Analysis Services с другими разработчиками ПО. Для этого не нужны подробные спецификации, объясняющие, где и как искать эти новые расширения функциональности.
Модули персонализации служб Analysis Services имеют множество возможных применений. Например, компания продает товар за различные виды валют. Можно создать вычисляемый элемент, возвращающий общую цифру продаж в местной валюте пользователя, который просматривает куб. Этот элемент создается как модуль персонализации. Затем этот вычисляемый элемент можно сделать общим для группы пользователей. Как только элемент сделан общим, пользователи немедленно получают доступ к вычисляемому элементу, как только подключатся к серверу. Они получат доступ к элементу, даже если интерфейс, которым они пользуются, отличен от использованного при создании вычисляемого элемента.
Модули персонализации служб Analysis Services — простое и элегантное изменение существующей архитектуры управляемых сборок. Модули доступны через объектную модель служб Analysis ServicesMicrosoft.AnalysisServices.AdomdServer, синтаксис многомерных выражений и наборы строк схемы.
Логическая архитектура
Архитектура модулей персонализации служб Analysis Services основана на архитектуре управляемых сборок и следующих четырех основных элементах.
Специальный атрибут [PlugInAttribute]
При запуске службы, службы Analysis Services загружают нужные сборки и решают, какие классы имеют специальный атрибут PlugInAttribute.Примечание .NET Framework определяет специальные атрибуты как способ описания программного кода и влияния на поведение времени выполнения. Дополнительные сведения см. в разделе Общие сведения об атрибутах в «Руководстве разработчика .NET Framework» библиотеки MSDN.
Для всех классов, содержащих специальный атрибут PlugInAttribute, службы Analysis Services вызывают конструкторы по умолчанию. Вызов всех конструкторов при запуске представляет собой удобный момент для построения новых объектов независимо от действий пользователя.
Конструктор класса, помимо построения небольшого кэша информации о разработке и управлении модулями персонализации, обычно подписывается на события SessionOpened и SessionClosing. Если класс не подписан на эти события, он может быть ошибочно помечен для удаления сборщиком мусора среды CLR.
Контекст сеанса
Для объектов, основанных на модулях персонализации, службы Analysis Services создают среду выполнения во время клиентского сеанса и динамически строят большинство объектов этой среды. Эта среда выполнения, как и любая другая сборка CLR, имеет доступ к другим функциям и хранимым процедурам. По окончании клиентского сеанса службы Analysis Services удаляют динамически созданные объекты и закрывают среду выполнения.События
Создание объекта запускается событиями сеанса On-Cube-OpenedCubeOpened и On-Cube-ClosingCubeClosing.Связь между клиентом и сервером происходит посредством определенных событий. Эти события сообщают клиенту о ситуациях, в результате которых создаются клиентские объекты. Среда клиента создается динамически с помощью двух наборов событий: события сеанса и события куба.
События сеанса связаны с объектом сервера. Когда клиент регистрируется на сервере, службы Analysis Services создают сеанс и запускают событие SessionOpened. Когда клиент закрывает сеанс на сервере, службы Analysis Services запускают событие SessionClosing.
События куба связаны с объектом соединения. Соединение с кубом запускает событие CubeOpened. Закрытие соединения с кубом — посредством закрытия куба или переключения на другой куб — запускает событие CubeClosing.
Трассировка и обработка ошибок
С помощью приложения Приложение SQL Server Profiler можно трассировать любые действия. Необработанные ошибки заносятся в журнал событий Windows.
Всякое создание объектов и управление ими происходит независимо от этой архитектуры, и за него отвечают разработчики этих объектов.
Основания инфраструктуры
Модули персонализации служб Analysis Services основаны на существующих компонентах. Далее следует сводка усовершенствований и улучшений, обеспечивающих функциональность модулей персонализации.
Сборки
Специальный атрибут PlugInAttribute можно добавлять в пользовательские сборки, чтобы опознать классы модулей персонализации служб Analysis Services.
Изменения модели объектов AdomdServer
Следующие объекты в модели объектов Microsoft.AnalysisServices.AdomdServer были улучшены или добавлены.
Новый класс AdomdConnection
Новый класс AdomdConnection содержит несколько модулей персонализации, доступ к которым предоставляется через свойства и события.
Свойства
SessionID — строковое значение, представляющее собой идентификатор сеанса текущего соединения (только для чтения).
ClientCulture — ссылка на культуру заказчика, связанная с текущим сеансом (только для чтения).
User — ссылка на интерфейс идентификации, представляющий текущего пользователя (только для чтения).
События
Новые свойства в классе Context
У класса Context появились два новых свойства:
Server — ссылка на новый объект сервера (только для чтения);
CurrentConnection — ссылка на новый объект AdomdConnection (только для чтения).
Новый класс Server
Новый класс Server содержит несколько модулей персонализации, доступ к которым предоставляется через свойства и события.
Свойства
Name — строка, представляющая собой имя сервера (только для чтения).
Culture — ссылка на глобальную культуру, связанную с сервером.
События
Класс AdomdCommand
Класс AdomdCommand теперь поддерживает следующие команды многомерных выражений:
Расширения и усовершенствования многомерных выражений
Команда CREATE MEMBER улучшена добавлением свойств caption, display_folder и associated_measure_group.
Добавлена новая команда UPDATE MEMBER, чтобы избежать повторного создания элемента, если необходимо обновление с последующей потерей порядка вычислений. Обновления не могут изменить область вычисляемого элемента, переместить вычисляемый элемент к другому родителю или определить другой solveorder.
Команда CREATE SET улучшена добавлением свойств caption и display_folder и новым ключевым словом STATIC | DYNAMIC. Static означает, что набор вычисляется только во время создания. Dynamic указывает, что набор вычисляется каждый раз при его использовании в запросе. Если ключевое слово отсутствует, значение по умолчанию — STATIC.
В синтаксис многомерных выражений добавлены команды CREATE KPI и DROP KPI. Ключевые индикаторы производительности можно создавать динамически из любого сценария многомерных выражений.
Расширения наборов строк схем
Добавлен столбец scope в набор строк схемы MDSCHEMA_MEMBERS. Возможны следующие значения области действия: MDMEMBER_SCOPE_GLOBAL=1, MDMEMBER_SCOPE_SESSION=2.
Добавлен столбец set_evaluation_context в набор строк схемы MDSCHEMA_MEMBERS. Допустимы следующие значения контекста вычислений: MDSET_RESOLUTION_STATIC = 1, MDSET_RESOLUTION_DYNAMIC = 2.
Добавлен столбец scope в набор строк схемы MDSCHEMA_KPIS. Возможны следующие значения области действия: MDKPI_SCOPE_GLOBAL=1, MDKPI_SCOPE_SESSION=2.