Введение в SQL Server Analysis Services для разработчика. XMLA DDL

Содержание предыдущей серии

Командой может выступать не только DML, но и DDL-запрос (Create, Alter, Delete, ...) – см. BOL. Этим XMLA превосходит MDX, который вообще не предусматривал в своем синтаксисе никаких DDL-конструкций, кроме, по-моему, создания локального куба. C версии 2005, по крайней мере, базу данных и находящиеся внутри нее объекты стало возможным заскриптовать в XMLA из SSMS по аналогии с реляционным SQL Server, когда кликаешь правой кнопкой по объекту и говоришь Generate Script. Помимо DDL, командой могут выступать другие операции над кубиками (процессить, бэкапить и пр.) Например:

<Execute xmlns="urn:schemas-microsoft-com:xml-analysis"> 
  <Command> 
    <Backup xmlns="https://schemas.microsoft.com/analysisservices/2003/engine"> 
      <Object> 
        <DatabaseID>Adventure Works DW 2008R2</DatabaseID> 
      </Object> 
      <File>c:\Temp\Adventure Works DW.abf</File> 
      <AllowOverwrite>true</AllowOverwrite> 
    </Backup> 
  </Command> 
  <Properties /> 
</Execute>

Скрипт 1

рис. 1

К слову, пара замечаний по бэкапу. DatabaseID может, вообще говоря, отличаться от имени базы. Посмотреть его можно разными способами, самый простой сейчас - правокликнуть по базе в SSMS и выбрать Properties:

Рис. 2

Если не указывать путь для файла бэкапа, он забэкапится в бэкапную директорию по умолчанию, задаваемую в свойствах аналитического сервера:

Рис. 3

Все, что находится внутри элемента Command запроса XMLA, будь то бэкап или MDX-запрос или что угодно еще, может использоваться в качестве MDX-запроса в SSMS или AdomdCommand. Откройте File -> New -> Analysis Services MDX Query и перенесите в него из XMLA-запроса Скрипт 1 Inner Xml элемента Command:

рис. 4

Видите, хотя это не в чистом виде MDX, он тем не менее выполняется. Также скобки <Execute> и <Command> можно отбрасывать на рис.1, выполняя начинку как XMLA-запрос.

Как и для SQL, существуют шаблоны MDX- и XMLA-запросов, позволяющие облегчить на ранних стадиях их постижение.

рис. 5

Особенно полагаться на них я бы все же не советовал. Например, если бы в изучении бэкапа мы ограничились шаблоном, то не узнали бы про существование полезного элемента <AllowOverwrite>. Несмотря на откровенную халтуру в официальной документации я бы рекомендовал BOL в качестве основного ресурса (ссылка приводилась в начале поста), потому что лучшего, к сожалению, пока все равно нет. Допустимые команды XMLA и их структуру можно видеть в разделе Child elements.

Переход на следующую серию

Автор: Алексей Шуленин