2012-11-14 121 views
1

正在編寫涉及多於2個軸的SSAS MDX查詢以檢索值。使用ADOMD.NET,我能得到返回的單元集,並通過使用檢索SSAS ​​ MDX中的單元格值

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

確定的價值有沒有辦法,我可以得到單元集的單元格(0)值在我的MDX查詢,而不是依賴於數據恢復到ADOMD.NET?

謝謝!


編輯1: - 基於Daryl的評論,下面是關於我在做什麼的一些細節。我現在的查詢使用幾個軸,這就是:

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 

如果我運行在管理Studio中的查詢,有人告訴我結果不能顯示單元集超過兩軸 - 這是有道理的,因爲..你知道..有超過2個軸。但是,如果我使用ADOMD.NET以聯機方式運行此查詢,並將返回的值讀入ADOMD.NET網格集,則可以檢查單元格「0」的值,爲我提供我的價值......據我瞭解它(即在立方體中的總noob)是所有這些值相交處的值。所以要回答你的問題Daryl,我最想擁有的就是能夠將價值返回給我,而不必讀取調用應用程序中的單元格。你爲什麼會問?那麼..最終我很想有一個查詢執行幾個多軸查詢來返回值。再一次..我很新的多維數據集和MDX,所以它可能會在這一切都錯了(我是一個.NET開發商貿易)。

+0

林不知道你想達到什麼。你問「有沒有一種方法可以在我的MDX查詢中獲取CellSet的Cell(0)值」 - 您的mdx是否返回所需的響應,並且您希望將網格組織爲更具可讀性,或者您是否想要更改基礎mdx查詢?也許一個僞代碼的例子,你希望實現將有助於 –

+0

謝謝達里爾,只是增加了更多的細節 – ewitkows

+0

謝謝ewitkows,這有助於。爲了確保我們不會使情況過度複雜化,你計劃消耗所有四個軸還是將兩個軸交叉連接就足夠了? SELECT {[Measures]。[Loss]} ON 0, {[Term Date]。[Date Calcs]。[MTD] * [Sale Date]。[YQMD]。[DAY]。&[20121115] * [客戶]。[ID]。[All]。[A612Q4-35]} ON 1 FROM OUR_CUBE –

回答

1

簡化查詢返回兩個座標軸;

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

,然後嘗試下面的訪問單元集;

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

這是罰款高達選擇在列和行上。這將有助於分析如何遍歷主查詢中的子選擇查詢。