2012-11-14 3 views
1

Im écrit des requêtes SSAS MDX impliquant plus de 2 axes 'pour récupérer une valeur. En utilisant ADOMD.NET, je peux obtenir le retour cellset et déterminer la valeur en utilisantRécupération de la valeur de cellule dans SSAS ​​MDX

lblTotalGrossSales.Text = CellSet.Cells(0).Value 

Est-il possible que je peux obtenir la cellule du Cellset (0) Valeur dans ma requête MDX, au lieu de compter sur les données de retour à ADOMD.NET?

merci!


Édition 1: - Basé sur le commentaire de Daryl, voici quelques explications sur ce que je fais. Ma requête en cours utilise plusieurs axes, qui est:

SELECT {[Term Date].[Date Calcs].[MTD]} ON 0, 
{[Sale Date].[YQMD].[DAY].&[20121115]} ON 1, 
{[Customer].[ID].[All].[A612Q4-35]} ON 2, 
{[Measures].[Loss]} ON 3 
FROM OUR_CUBE 

Si je lance cette requête dans Management Studio, on me dit Les résultats ne peuvent être affichés pour cellsets avec plus de deux axes - ce qui est logique puisque .. vous savoir .. il y a plus de 2 axes. Toutefois, si j'utilise ADOMD.NET pour exécuter cette requête en ligne et lire la valeur retournée dans un ensemble de cellules ADOMD.NET, je peux vérifier la valeur à la cellule "0", en me donnant ma valeur ... ce que je comprends il (im un noob total aux cubes) est la valeur assise où toutes ces valeurs se croisent.

Donc, pour répondre à votre question Daryl, ce que j'aimerais avoir, c'est la possibilité d'avoir la valeur ici retournée à moi, ne pas avoir à lire dans une cellule définie dans l'application appelante. Pourquoi vous pouvez demander? Eh bien ... en fin de compte j'aimerais avoir une requête qui effectue plusieurs requêtes multi-axes pour retourner les valeurs. Encore une fois .. Im très nouveau pour les cubes et MDX, donc il est possible que je vais à tout faux (Im un développeur .NET par le commerce).

+0

Je ne suis pas sûr de ce que vous essayez d'atteindre. Vous demandez "Existe-t-il un moyen de récupérer la valeur Cell (0) CellSet dans ma requête MDX" - votre mdx renvoie-t-il la réponse désirée et vous voulez organiser le jeu de cellules pour qu'il soit plus lisible ou voulez-vous changer le mdx sous-jacent? question? peut-être un pseudo code exemple de ce que vous espérez atteindre aiderait –

+0

Merci Daryl, vient d'ajouter plus de détails – ewitkows

+0

Merci ewitkows, cela aide. Juste pour s'assurer que nous ne compliquons pas trop la situation, prévoyez-vous de consommer tous les quatre axes ou croiserez-vous joindre deux être suffisant? SELECT {[Mesures]. [Perte]} ON 0, {[Date du terme]. [Date Calcs]. [MTD] * [Date de vente]. [YQMD]. [JOUR]. & [20121115] * [ Client]. [ID]. [Tous]. [A612Q4-35]} ON 1 FROM OUR_CUBE –

Répondre

1

Simplifiez votre requête pour retourner deux axes;

SELECT {[Measures].[Loss]} ON 0, {[Term Date].[Date Calcs].[MTD] * [Sale Date].[YQMD].[DAY].&[20121115] * [Customer].[ID].[All].[A612Q4-35]} ON 1 FROM OUR_CUBE

puis effectuez les opérations suivantes pour accéder au cellset;

string connectionString = "Data Source=localhost;Catalog=AdventureWorksDW2012"; 
     //Create a new string builder to store the results 
     System.Text.StringBuilder result = new System.Text.StringBuilder(); 
     AdomdConnection conn = new AdomdConnection(connectionString); 
     //Connect to the local serverusing (AdomdConnection conn = new AdomdConnection("Data Source=localhost;")) 
     { 
      conn.Open(); 

      //Create a command, using this connection 
      AdomdCommand cmd = conn.CreateCommand(); 
      cmd.CommandText = @"SELECT { [Measures].[Unit Price] } ON COLUMNS , {[Product].[Color].[Color].MEMBERS-[Product].[Color].[]} * [Product].[Model Name].[Model Name]ON ROWS FROM [Adventure Works] ;"; 

      //Execute the query, returning a cellset 
      CellSet cs = cmd.ExecuteCellSet(); 

      //Output the column captions from the first axis//Note that this procedure assumes a single member exists per column. 
      result.Append("\t\t\t"); 

      TupleCollection tuplesOnColumns = cs.Axes[0].Set.Tuples; 

      foreach (Microsoft.AnalysisServices.AdomdClient.Tuple column in tuplesOnColumns) 
      { 
       result.Append(column.Members[0].Caption + "\t"); 

      } 
      result.AppendLine(); 

      //Output the row captions from the second axis and cell data//Note that this procedure assumes a two-dimensional cellset 
      TupleCollection tuplesOnRows = cs.Axes[1].Set.Tuples; 
      for (int row = 0; row < tuplesOnRows.Count; row++) 
      { 
       for (int members = 0; members < tuplesOnRows[row].Members.Count; members++) 
       { 
        result.Append(tuplesOnRows[row].Members[members].Caption + "\t"); 
       } 


       for (int col = 0; col < tuplesOnColumns.Count; col++) 
       { 
        result.Append(cs.Cells[col, row].FormattedValue + "\t"); 
       } 
       result.AppendLine(); 
      } 
      conn.Close(); 

      TextBox1.Text = result.ToString(); 
     } // using connection 

Source : Retrieving Data Using the CellSet

-1

Ceci est bien jusqu'à sélection sur des colonnes et des lignes. Il sera utile d'analyser comment parcourir les requêtes de sous-sélection à partir de la requête principale.

Questions connexes