Domanda

Ho una query XMLA che restituisce lo stato e la data dell'ultima elaborazione di un cubo di Analysis Services come XML, in questo modo:

Domanda:

<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>

Risultato:

<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>

Vorrei poter utilizzare questa query XMLA in un pacchetto di Integration Services, analizzando e archiviando il risultato in una tabella del database di SQL Server. Tuttavia, l'unica attività che sembra eseguire una query XMLA è la quot &; Analysis Services Execute DDL & Quot; compito, che non ha un metodo per restituire i risultati della query per quanto posso dire.

Qualcuno ha qualche suggerimento su come altro farlo?

È stato utile?

Soluzione

Mentre puoi eseguire " normale " MDX / XMLA attraverso vari meccanismi in SSIS, incluso tramite l'attività Esegui SQL, lo avvolgerà sempre all'interno. è un metodo di alto livello proprio come e non può essere racchiuso all'interno, da cui il problema.

Hai due possibili soluzioni:

  1. Avvolgi il tuo XMLA all'interno di un'attività Esegui SQL usando una chiamata OPENQUERY all'interno del tuo database relazionale. Faresti qualcosa come SELEZIONA * da OPENQUERY () e puoi effettivamente fare un buon lavoro nell'analisi del set di risultati XML in SQL Server.
  2. Apri i tuoi server SSAS configurando l'accesso HTTP ( http: / /www.microsoft.com/technet/prodtechnol/sql/2005/httpasws.mspx ) in modo da poter inviare XMLA come chiamata al servizio web. Esiste un'attività del servizio Web in SSIS che è possibile utilizzare per eseguire il proprio e consumare i risultati.

Entrambe queste opzioni hanno ovviamente un aspetto negativo.

Altri suggerimenti

Per i comandi Discover:

Questo funziona molto bene per me:

Creare un'attività di script utilizzando lo spazio dei nomi XMLA per eseguire la query di individuazione. Dopo aver ricevuto la risposta, analizzare xmla e aggiungerlo a VB.NET Datatable e inserire i dati analizzati nella tabella sql.

Puoi anche utilizzare la nuova sintassi DMV in SSAS 2008 o la funzione DMV da ASSP a in SSAS 2005 per restituire questi dati in formato tabellare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top