Использовать результаты запроса XMLA в службах Integration Services - PullRequest
0 голосов
/ 29 января 2009

У меня есть запрос XMLA, который возвращает дату состояния и последней обработки куба служб Analysis Services в виде XML, например:

Запрос:

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
  <RequestType>DISCOVER_XML_METADATA</RequestType>
  <Restrictions >
    <RestrictionList xmlns="urn:schemas-microsoft-com:xml-analysis">
      <DatabaseID>SSAS - Premium and Claims V2</DatabaseID>
      <CubeID>PDW04 1</CubeID>
      <ObjectExpansion>ReferenceOnly</ObjectExpansion>
    </RestrictionList>
  </Restrictions>
  <Properties />
</Discover>

Результат:

<return xmlns="urn:schemas-microsoft-com:xml-analysis">
  <root xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:schema targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:sql="urn:schemas-microsoft-com:xml-sql" elementFormDefault="qualified">
      <xsd:element name="root">
        <xsd:complexType>
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="row" type="row" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:simpleType name="uuid">
        <xsd:restriction base="xsd:string">
          <xsd:pattern value="[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}" />
        </xsd:restriction>
      </xsd:simpleType>
      <xsd:complexType name="xmlDocument">
        <xsd:sequence>
          <xsd:any />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="row">
        <xsd:sequence>
          <xsd:element sql:field="METADATA" name="METADATA" type="xmlDocument" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
    <row>
      <xars:METADATA xmlns="http://schemas.microsoft.com/analysisservices/2003/engine" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:xars="urn:schemas-microsoft-com:xml-analysis:rowset">
        <Cube>
          <Name>Premium</Name>
          <ID>PDW04 1</ID>
          <CreatedTimestamp>2008-11-23T22:31:06</CreatedTimestamp>
          <LastSchemaUpdate>2009-01-22T00:50:13</LastSchemaUpdate>
          <LastProcessed>2009-01-07T22:28:34</LastProcessed>
          <State>Processed</State>
        </Cube>
      </xars:METADATA>
    </row>
  </root>
</return>

Я хотел бы иметь возможность использовать этот запрос XMLA в пакете служб Integration Services, анализируя и сохраняя результат в таблице базы данных SQL Server. Однако единственными задачами, которые, по-видимому, выполняют запрос XMLA, является задача «Выполнение DDL служб Analysis Services», которая, насколько я могу судить, не имеет метода возврата результатов запроса.

У кого-нибудь есть предложения, как еще этого добиться?

Ответы [ 3 ]

3 голосов
/ 29 января 2009

Хотя вы можете запускать «обычный» MDX / XMLA с помощью различных механизмов в службах SSIS, в том числе с помощью задачи «Выполнение SQL», он всегда будет заключен в нее. это метод верхнего уровня, такой же, как и не может быть заключен внутрь, поэтому проблема.

У вас есть два возможных решения:

  1. Оберните ваш XMLA внутри задачи «Выполнение SQL», используя вызов OPENQUERY внутри вашей реляционной базы данных. Вы бы сделали что-то вроде SELECT * из OPENQUERY (), и вы действительно можете хорошо разобрать набор результатов XML внутри SQL Server.
  2. Откройте серверы SSAS, настроив доступ HTTP (http://www.microsoft.com/technet/prodtechnol/sql/2005/httpasws.mspx)), чтобы вы могли отправлять XMLA в виде вызова веб-службы. В SSIS есть задача веб-службы, которую можно использовать для выполнения и использования результатов.

Очевидно, что оба эти варианта имеют свои недостатки.

1 голос
/ 22 июля 2009

Вы также можете использовать новый синтаксис DMV в SSAS 2008 или функцию DMV от ASSP до в SSAS 2005 для возврата этих данных в табличном формате.

1 голос
/ 12 марта 2009

Для команд обнаружения:

Это очень хорошо работает для меня:

Создайте задачу сценария с использованием пространства имен XMLA и выполните запрос обнаружения. Получив ответ, проанализируйте xmla, добавьте в VB.NET Datatable и вставьте проанализированные данные в таблицу sql.

...