純粋な MDX では簡単に記述できない複雑な計算を実行するために、.NET でストアド プロシージャを記述しています。私が抱えている最初の問題は、一連のデータを表形式で取得して計算に渡す方法です。
これまでの私のコードは以下に書かれています。位置 ** 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
}