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 1479 fois, 5 pages
 4 | Méthode Execute
Nous avons détaillé le Discover, mais nous avons aussi la méthode Execute qui nous permet d'exécuter des commandes au sein d'AS 2005 (opération de batch etc...). Pour illustrer, je vais juste faire un zoom sur le Requêtage MDX:Le prototype d'Execute est :

<Execute>

  <Command>...</Command>

  <Properties>...</Properties>

  <Parameters>...</Parameters>

</Execute>

Dont la liste des commandes possibles est :

<Alter>...</Alter>

<Backup>...</Backup>

<Batch>...</Batch>

<BeginTransaction>...</BeginTransaction>

<Cancel>...</Cancel>

<ClearCache>...</ClearCache>

<CommitTransaction>...</CommitTransaction>

<Create>...</Create>

<Delete>...</Delete>

<DesignAggregations>...</DesignAggregations>

<Drop>...</Drop>

<Insert>...</Insert>

<Lock>...</Lock>

<MergePartitions>...</MergePartitions>

<NotifyTableChange>...</NotifyTableChange>

<Process>...</Process>

<Restore>...</Restore>

<RollbackTransaction>...</RollbackTransaction>

<Statement>...</Statement>

<Subscribe>...</Subscribe>

<Synchronize>...</Synchronize>

<Unlock>...</Unlock>

<Update>...</Update>

<UpdateCells>...</UpdateCells>

Pour exécuter le MDX, nous passons la commande Statement :

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

  <Command>

    <Statement>

      select

      CrossJoin(  { [Promotion].[Promotion Category].[Promotion Category].Members }  ,

                  { ([Measures].[Measures].[MeasuresLevel].[Order Quantity]) ,

                    ([Measures].[Measures].[MeasuresLevel].[Total Product Cost])

                  } 

                )

      on columns  ,

      { [Product].[Product Model Lines].[Product Line].Members }  on rows

      from

      [BIART]

    </Statement>

  </Command>

  <Properties>

    <PropertyList>

      <Catalog>AWBISE</Catalog>

      <Format>Tabular</Format>

    </PropertyList>

  </Properties>

</Execute>

Le point important est sur le format. Nous spécifions Tabular. SSAS 2005 va nous renvoyer les données du cube de manière “aplatie” à l'image d'un rowset :

<row>

  <_x005B_Product_x005D_._x005B_Product_x0020_Model_x0020_Lines_x005D_.

    _x005B_Product_x0020_Line_x005D_._x005B_MEMBER_CAPTION_x005D_>Components

  </_x005B_Product_x005D_._x005B_Product_x0020_Model_x0020_Lines_x005D_.

    _x005B_Product_x0020_Line_x005D_._x005B_MEMBER_CAPTION_x005D_>

</row>

<row>

  <_x005B_Product_x005D_._x005B_Product_x0020_Model_x0020_Lines_x005D_

    ._x005B_Product_x0020_Line_x005D_._x005B_MEMBER_CAPTION_x005D_>Mountain

    </_x005B_Product_x005D_._x005B_Product_x0020_Model_x0020_Lines_x005D_.

    _x005B_Product_x0020_Line_x005D_._x005B_MEMBER_CAPTION_x005D_>

  <_x005B_Promotion_x005D_._x005B_Promotion_x0020_Category_x005D_.

    _x0026__x005B_No_x0020_Discount_x005D_._x005B_Measures_x005D_._x005B_Order_x0020_Quantity_x005D_

    xsi:type="xsd:int">16278

    </_x005B_Promotion_x005D_._x005B_Promotion_x0020_Category_x005D_._x0026__

    x005B_No_x0020_Discount_x005D_._x005B_Measures_x005D_._x005B_Order_x0020_Quantity_x005D_>

  ….

  ….

  <_x005B_Promotion_x005D_._x005B_Promotion_x0020_Category_x005D_._x0026__x005B_Reseller_x005D_

    ._x005B_Measures_x005D_._x005B_Total_x0020_Product_x0020_Cost_x005D_ xsi:type="xsd:double">

    6.952286150000001E4</_x005B_Promotion_x005D_._x005B_Promotion_x0020_Category_x005D_.

  _x0026__x005B_Reseller_x005D_._x005B_Measures_x005D_._x005B_Total_x0020_Product_x0020_Cost_x005D_>

</row>

La même requête jouée en MDX directement dans la console nous renvoie :
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image016.png
 
Et toujours pour la même requête dans notre XMLAViewer :
 
/content/e1b2a89b-084f-44b2-9fba-ac816ca8195c/image017.png
 
Nous pouvons demander l'Execute sous la forme multidimensionnelle :

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

  <Command>

    <Statement>

      select

      CrossJoin(  { [Promotion].[Promotion Category].[Promotion Category].Members }  ,

                  { ([Measures].[Measures].[MeasuresLevel].[Order Quantity]) ,

                    ([Measures].[Measures].[MeasuresLevel].[Total Product Cost])

                  } 

                )

      on columns  ,

      { [Product].[Product Model Lines].[Product Line].Members }  on rows

      from

      [BIART]

    </Statement>

  </Command>

  <Properties>

    <PropertyList>

      <Catalog>AWBISE</Catalog>

      <Format>Multidimensional</Format>

    </PropertyList>

  </Properties>

</Execute>

Le serveur nous reverra un message sous la forme :

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

  <!-- The following elements extend Resultset -->

  <!-- Optional schema elements -->

  <OlapInfo>...</OlapInfo>

  <Axes>...</Axes>

  <CellData>...</CellData>

</root>

Cette structure nous rappelle celle du CellSet. Le viewer XMLA n'est pas apte à restituer cette structure, et reproduire tout le XML n'a pas de sens. Ceci dit, je trouve intéressant de ne reproduire que le noeud CellData :

<CellData>

  <Cell CellOrdinal="8">

    <Value xsi:type="xsd:int">16278</Value>

    <FmtValue>16278</FmtValue>

  </Cell>

  <Cell CellOrdinal="9">

    <Value xsi:type="xsd:double">4.841635224900029E6</Value>

    <FmtValue>4841635.22490003</FmtValue>

  </Cell>

  …

  …

  …

  <Cell CellOrdinal="27">

    <Value xsi:type="xsd:double">2.3333200975000164E6</Value>

    <FmtValue>2333320.09750002</FmtValue>

  </Cell>

  <Cell CellOrdinal="28">

    <Value xsi:type="xsd:int">99</Value>

    <FmtValue>99</FmtValue>

  </Cell>

  <Cell CellOrdinal="29">

    <Value xsi:type="xsd:double">6.952286150000001E4</Value>

    <FmtValue>69522.8615</FmtValue>

  </Cell>

</CellData>

On retrouve nos valeurs, et pour ceux qui sont familiers avec ADOMD.Net, on retrouve notre ordinal qui nous permet de mapper données et métadonnées.
 
» Démarrer une discussion
 
Discussion démarée par bouzahme le 28/08/2008 à 17:15, 1 commentaire(s).