2012-04-02 9 views
2

Ich verwende den folgenden Code, um eine Abfrage in C# ausführen:Querying OLAP-Server

AdomdConnection con = new AdomdConnection("Datasource=local;..."); 

      con.Open(); 
      AdomdCommand command = con.CreateCommand(); 
      command.CommandText = input; 

      AdomdDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
      { 
for(i =0; i<reader.fieldCount; i++){ 
     a[i]=reader.GetString(i); 
} 
return a; 

Howeever, dieser Code gibt den vollständigen Pfad in der Hierarchie für jede Zelle. Das heißt, jede Reihe von Daten ist wie [AllGeography, Kanada, Vancouver, Allproduct, Fahrräder, Zubehör, 297483]. Ich möchte nur die Blätter und den Messwert abrufen, der lautet: [vancouver, accessories, 297483]. Was soll ich machen? Wie kann ich die Blätter angeben?

Antwort

2

Da das Ergebnis der MDX-Abfrage tatsächlich multidimensional ist, fühle ich mich mit ExecuteCellSet wohler. Sie können das ganze CellSet bekommen, dann erhalten Sie Messungen über Koordinaten.

Zum Beispiel (wenn Sie eine Maßnahme in Abfrage):

AdomdCommand cmd = conn.CreateCommand(); 
cmd.CommandText = @"SELECT 
      [Geography].[Geography].[Country].&[Canada].Children ON 0, 
      [Product].[Id] ON 1 
      FROM [Cube] 
      WHERE [Measures].[Your Measure]"; 

CellSet cs = cmd.ExecuteCellSet(); 

TupleCollection CanadaChildren = cs.Axes[0].Set.Tuples; 
TupleCollection ProductIds = cs.Axes[1].Set.Tuples; 

for (int row = 0; row < CanadaChildren.Count; row++) 
{ 
    for (int col = 0; col < ProductIds.Count; col++) 
    { 
     a[i++] = cs.Cells[col, row].Value; 
    } 
} 
conn.Close(); 

Wenn Sie mehrere Maßnahmen haben, als es eine dritte dimention in Abfrage sein wird und ein drittes cooridinate in einem Cellset.

Verwandte Themen