Renaud Harduin
XMLA Trivia : Découverte du XMLA
Le XMLA (XML for Analysis) est un langage normalisé par plusieurs éditeurs BI pour simplifier l'accès aux données aux cubes et aux métadonnées des bases multidimensionnelles.
Par Renaud Harduin publié le 25/05/2008 à 11:57, lu 1586 fois, 5 pages
 3 | Méthode Discover
C'est le premier type de requête que nous allons explorer. En terme de syntaxe, le discover revêt :

<Discover>

  <RequestType>...</RequestType>

  <Restrictions>...</Restrictions>

  <Properties>...</Properties>

</Discover>

Pour découvrir nos Sources de Données, nous indiquons en RequestType :

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">

  <RequestType>DISCOVER_DATASOURCES</RequestType>

  <Restrictions></Restrictions>

  <Properties></Properties>

</Discover>

Les types de requêtes sont définis dans la MSDN sur http://msdn.microsoft.com/en-us/library/ms126079.aspx
Les « properties » permettent de passer des propriétés (rendu/table/etc...) et les « restrictions » permettent de filtrer les requêtes.
Je ne reviens pas sur le DISCOVER_DATASOURCES.
La requête sur les DISCOVER_INSTANCES :

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">

  <RequestType>DISCOVER_INSTANCES</RequestType>

  <Restrictions>

    <RestrictionList>

      <INSTANCE_NAME></INSTANCE_NAME>

    </RestrictionList>

  </Restrictions>

  <Properties></Properties>

</Discover>

Nous renvoie :
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image008.png
 
A instance donnée (ici dans ma connexion), on pourra retrouver la liste de cubes
La requête sur DISCOVER_CUBE :

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">

  <RequestType>MDSCHEMA_CUBES</RequestType>

  <Restrictions>

    <RestrictionList>

    </RestrictionList>

  </Restrictions>

  <Properties>

    <PropertyList>

    </PropertyList>

  </Properties>

</Discover>

Nous renvoie :
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image009.png
 
Parmi les informations nominales, on trouvera les dates de mises à jours des cubes ou si le cube est ouvert en write back.
De manière basique la requête MDSCHEMA_DIMENSION renvoie toutes les dimensions de tous les cubes de l'instance, sans restriction :source12.xmlConcernant le détail, on retrouve des informations directement accessibles par opposition à ce que l'on a sur les appels objets en ADOMD.net (je pense notamment à la cardinalité et les hiérarchies par défaut):
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image010.png
 
et ...
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image011.png
 
Comme vous avez pu le remarquer, nous disposons de « properties » à passer à la requête. Je me suis donc dit que si par exemple je voulais cibler le cube BIART, je pourrais passer le Discover suivant :

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">

  <RequestType>MDSCHEMA_DIMENSIONS</RequestType>

  <Restrictions>

  </Restrictions>

  <Properties>

    <PropertyList>

      <Catalog>AWBISE</Catalog>

      <Cube>BIART</Cube>

    </PropertyList>

  </Properties>

</Discover>

Le résultat est resté le même. Si nous avons besoin de filtrage il faudra le jouer au niveau des Restrictions (le détail est disponible dans la MSDN), et donc travailler sur le Discover suivant (Bouton Dimension Restreinte) :

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">

  <RequestType>MDSCHEMA_DIMENSIONS</RequestType>

  <Restrictions>

    <RestrictionList>

      <CUBE_NAME>BIART</CUBE_NAME>

    </RestrictionList>

  </Restrictions>

  <Properties>

  </Properties>

</Discover>

Qui nous renvoie effectivement les métadonnées du cube BIART:
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image012.png
 
A ce niveau, nous pouvons aussi ouvrir une parenthèse pour donner un aperçu du deuxième mode d'appel du WebService. J'ai choisi d'exploiter l'appel élémentaire Send :

string  xmlaResult = _xmlaWS.Send(command, null);

mais cela m'oblige à construire tout l'arbre XML/A. Le client XMLA propose aussi une méthode Discover :

public void Discover(string requestType, string restrictions,

                    string properties, out string result,

                    bool skipResult, bool restrictionsXmlIsComplete,

                    bool propertiesXmlIsComplete)

    Member of Microsoft.AnalysisServices.Xmla.XmlaClient

Posé dans notre contexte, pour l'appel sans restrictions :

private void btnDDimensions_Click(object sender, EventArgs e)

{

    XmlDocument xmlDom = new XmlDocument();

    string result = "";

    string filter = "<PropertyList></PropertyList>";

 

    _xmlaWS.Discover("MDSCHEMA_DIMENSIONS", "", filter, out result, false, true, true);

 

 

    xmlDom.LoadXml(result);

    XmlNodeList nl = xmlDom.GetElementsByTagName("row");

    Debug.WriteLine(nl);

    this.renderData(nl);

}

Le résultat sera strictement identique.
Pour découvrir les métadonnées, nous allons utiliser les RequestType :
  1. MDSCHEMA_HIERARCHIES
  2. MDSCHEMA_LEVELS
  3. MDSCHEMA_MEMBERS
Il suffit de jouer sur les restrictions. Tout d'abord si on s'intéresse aux hiérarchies à dimension donnée, le Discover sera :

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">

  <RequestType>MDSCHEMA_HIERARCHIES</RequestType>

  <Restrictions>

    <RestrictionList>

      <CATALOG_NAME>AWBISE</CATALOG_NAME>

      <CUBE_NAME>BIART</CUBE_NAME>

      <DIMENSION_UNIQUE_NAME>[Promotion]</DIMENSION_UNIQUE_NAME>

    </RestrictionList>

  </Restrictions>

  <Properties>

  </Properties>

</Discover>

Le résultat est :
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image013.png
 
A hiérarchie donnée, nous pourrons obtenir la structure en termes de niveau de la hiérarchie :

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">

  <RequestType>MDSCHEMA_LEVELS</RequestType>

  <Restrictions>

    <RestrictionList>

      <CATALOG_NAME>AWBISE</CATALOG_NAME>

      <CUBE_NAME>BIART</CUBE_NAME>

      <DIMENSION_UNIQUE_NAME>[Promotion]</DIMENSION_UNIQUE_NAME>

      <HIERARCHY_UNIQUE_NAME>[Promotion].[Promotions]</HIERARCHY_UNIQUE_NAME>

    </RestrictionList>

  </Restrictions>

  <Properties>

  </Properties>

</Discover>

Qui nous renvoie :
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image014.png
 
Pour finir, à niveau donné, nous pourrons obtenir les membres :

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">

  <RequestType>MDSCHEMA_MEMBERS</RequestType>

  <Restrictions>

    <RestrictionList>

      <CATALOG_NAME>AWBISE</CATALOG_NAME>

      <CUBE_NAME>BIART</CUBE_NAME>

      <DIMENSION_UNIQUE_NAME>[Promotion]</DIMENSION_UNIQUE_NAME>

      <HIERARCHY_UNIQUE_NAME>[Promotion].[Promotions]</HIERARCHY_UNIQUE_NAME>

      <LEVEL_UNIQUE_NAME>[Promotion].[Promotions].[Promotion Type]</LEVEL_UNIQUE_NAME>

    </RestrictionList>

  </Restrictions>

  <Properties>

  </Properties>

</Discover>

 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image015.png
 
 
» Démarrer une discussion
 
Discussion démarée par bouzahme le 28/08/2008 à 17:15, 1 commentaire(s).