Обработка табличного куба из хранимой процедуры

У меня есть хранимая процедура, которая заполняет несколько таблиц в базе данных, которая является источником данных для табличного куба SSAS. Я хочу обработать куб в качестве последнего шага в хранимой процедуре, когда я закончу загрузку таблиц. Я нашел этот код:

DECLARE @XMLA XML = '
  <Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
    <Process>
      <Object>
        <DatabaseID>' + @Database + '</DatabaseID>
      </Object>
      <Type>ProcessFull</Type>
      <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
    </Process>
  </Batch>
';

DECLARE @Command VARCHAR(MAX) = CONVERT(VARCHAR(MAX), @XMLA);
EXEC (@Command) AT SSAS;

Которая принимает имя базы данных, но я не могу понять, как заставить ее работать на конкретном сервере или экземпляре SSAS. Моя хранимая процедура и куб находятся на разных именованных экземплярах сервера Sql. Кто-нибудь знает, как встроить имя сервера / экземпляра в xmla или запустить xmla на указанном экземпляре?

Заранее спасибо.


person Programnik    schedule 17.11.2020    source источник
comment
Я бы создал задание агента sql, а затем запустил его из сохраненной процедуры. Кстати, TMSL - это путь вперед для табличных кубов   -  person Mitch Wheat    schedule 17.11.2020


Ответы (2)


Я обнаружил, что ключ использует связанный сервер (и TMSL, спасибо Mitch Wheat):

DECLARE @TMSL VARCHAR(MAX) = '{
  "refresh": {
    "type": "full",
    "objects": [
      {
        "database": ' + @DataBaseName + '
      }
    ]
  }
}';
 

EXEC (@TMSL) AT SSASTABULAR; -- linked server name

SSASTABULAR - это связанный сервер, указывающий на мой экземпляр сервера ssas cube.

person Programnik    schedule 17.11.2020
comment
я думаю, что более чистый подход состоит в том, чтобы создать задание агента, а затем запустить это задание из SP. - person Mitch Wheat; 17.11.2020