2012-05-09 69 views
2

我在.NET中編寫存儲過程來執行一些複雜的計算,這些計算不能在純MDX中輕鬆編寫。我遇到的第一個問題是如何以表格形式檢索一組數據以傳遞給我的計算。分析服務存儲過程性能

到目前爲止我的代碼如下寫入。我會想,當我們在位置** 1處檢索到我們的值後,我們會讓內存中的所有數據與之交互。但是,似乎在位置* * 2上,查詢子多維數據集將在我們的範圍內的每一天發佈到存儲引擎。這對性能是毀滅性的。

有什麼我做錯了嗎?我可以調用另一種方法來一次評估該集​​合嗎?

// First get the date range that we'd like to calculate over. 
// (These values are constant here for example only) 
DateTime date = new DateTime(2012, 4, 1); 
int dateFrom = KeyFromDate(date.AddDays(-360)); 
int dateTo = KeyFromDate(date); 

string dateRange = string.Format(
    "[Date].[Date].&[{0}]:[Date].[Date].&[{1}]", 
    dateFrom, 
    dateTo 
); 

Expression expression = new Expression(dateRange + "*[Measures].[My Measure]"); 
MDXValue value = expression.CalculateMdxObject(null); // ***1 

foreach (var tuple in value.ToSet().Tuples) 
{ 
    MDXValue tupleValue = MDXValue.FromTuple(tuple).ToInt32(); // ***2 
} 
+0

您如何連接到您的多維數據集以獲取數據?您是否在使用ADOMD?如果是的話你使用ExecuteCellSet,ExecuteXmlReader或somethignelse? – Rick

+0

我寫在Microsoft.AnalysisServices.AdomdServer命名空間[鏈接](http://msdn.microsoft.com/en-us/library/microsoft.analysisservices.adomdserver.expression一個Analysis Services存儲過程和表達類。 calculatemdxobject%28v = sql.105%29.aspx)連接到多維數據集。 Adomd不適用於在客戶端應用程序中使用。 – Brett

回答

0

運行SQL事件探查器,連接到分析服務,選項卡上的「事件選擇」選中「顯示所有事件」,選擇「得到aggredations數據」,「獲取從緩存中的數據」,「查詢subsube」和「查詢子多維數據集詳細「。

首先閱讀本文件http://www.microsoft.com/en-us/download/details.aspx?id=17303 - 見第18頁 - 爲了瞭解「查詢子多維數據集詳細」工作。

然後在調試模式的Visual Studio中(您正在調試您的過程)通過行** 1 並在SQL Profiler中查看在詳細信息中查詢的內容 - 什麼度量組以及哪些屬性。

然後在SQL事件探查器穿過*** 2和再次看到什麼查詢詳細的事件。

我相信,一組屬性是不同的,所以它可以使發生在** 1它使用了一些彙總,並在地方* * 2時,「值」是存在於元組 - 有沒有爲這組屬性聚合,所以一旦它從「度量組緩存中讀取」幾次,就不會「從聚合中讀取」。

我不能告訴更確切的原因,我沒有你的立方體。嘗試通過「query subcube verbose」事件來找出這個問題,並嘗試使用BIDS Helper手動創建必要的聚合(使用特定的一組屬性) - 這可能會有所幫助。