純粋なMDXで簡単に書き込めない複雑な計算を行うために.NETのストアドプロシージャを作成しています。最初の問題は、私の計算に渡すために、一連のデータを表形式で取り出す方法です。Analysis Servicesストアドプロシージャのパフォーマンス
これまでのコードは以下のとおりです。私は、ポジション** で値を取得した後、私たちはすべてのデータをメモリに入れて相互作用すると思っていたでしょう。しかし、ポジション* * 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
}
どのようにデータを取得するためにキューブに接続していますか? ADOMDを使用していますか?もしそうなら、ExecuteCellSet、ExecuteXmlReader、またはsomethignelseを使用していますか? – Rick
私はAnalysis Servicesに格納されたprocとExpressionクラスをMicrosoft.AnalysisServices.AdomdServer名前空間に作成しています(http://msdn.microsoft.com/en-us/library/microsoft.analysisservices.adomdserver.expression)。 calculatemdxobject%28v = sql.105%29.aspx)がキューブに接続します。 Adomdはクライアントアプリで使用するため、適用されません。 – Brett