2009-01-29 8 views
-1

J'ai une requête XMLA qui retourne l'Etat et date de dernier traitement d'un cube Analysis Services en XML, comme suit:Utilisez les résultats d'une requête XMLA dans Integration Services

Requête:

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

Résultat :

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

Je voudrais être en mesure d'utiliser cette requête XMLA dans un package Integration services, l'analyse et le stockage du résultat dans une table de base de données SQL Server. Cependant, la seule tâche qui semble exécuter une requête XMLA est la tâche "Analysis Services Execute DDL", qui n'a pas de méthode pour renvoyer les résultats de la requête autant que je peux le dire.

Est-ce que quelqu'un a des suggestions sur la façon de réaliser cela?

Répondre

2

Bien que vous puissiez exécuter MDX/XMLA "standard" à l'aide de divers mécanismes dans SSIS, y compris via la tâche Execute SQL, il l'enveloppe toujours. est une méthode de haut niveau juste comme et ne peut pas être enveloppée à l'intérieur, d'où le problème.

Vous avez deux solutions possibles:

  1. envelopper votre XMLA dans une tâche d'exécution SQL à l'aide d'un appel OPENQUERY dans votre base de données relationnelle. Vous feriez quelque chose comme SELECT * à partir de OPENQUERY() et vous pouvez réellement faire un bon travail d'analyse du jeu de résultats XML dans SQL Server.
  2. Ouvrez vos serveurs SSAS en configurant l'accès HTTP (http://www.microsoft.com/technet/prodtechnol/sql/2005/httpasws.mspx) afin de pouvoir envoyer XMLA en tant qu'appel de service Web. Il existe une tâche de service Web dans SSIS que vous pouvez utiliser pour exécuter votre et consommer les résultats.

Ces deux options ont évidemment quelques inconvénients.

+0

L'option 2 semble également être le meilleur moyen de consommer des données Hyperion Essbase via SSIS. Vous pouvez également utiliser des tâches de script et des sources de script au lieu de la tâche de service Web, car la tâche de service Web ne fonctionne pas particulièrement bien. –

1

Pour Découvrez les commandes:

Cela fonctionne très bien pour moi:

Créer une tâche de script à l'aide question de l'espace de noms XMLA la requête découvrir. Une fois que vous recevez la réponse analyser le xmla et ajouter à VB.NET Datatable et insérer les données analysées dans la table sql.

1

Vous pouvez également utiliser la nouvelle syntaxe DMV dans SSAS 2008 ou la fonction DMV de ASSP à dans SSAS 2005 pour renvoyer ces données dans un format tabulaire.

Questions connexes