2

純粋な 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
}
4

1 に答える 1

0

SQL プロファイラーを実行し、分析サービスに接続し、[イベントの選択] タブで [すべてのイベントを表示] をオンにして、[集計からデータを取得]、[キャッシュからデータを取得]、[サブキューブのクエリ]、[サブキューブの詳細なクエリ] を選択します。

最初に、このドキュメントhttp://www.microsoft.com/en-us/download/details.aspx?id=17303をお読みください- 18 ページを参照 - 「クエリ サブキューブ詳細」がどのように機能するかを理解してください。

次に、Visual Studio (プロシージャをデバッグしている場所) で、デバッグ モードで **1 行を通過し、SQL プロファイラーで詳細にクエリされた内容、メジャー グループと属性を確認します。

次に ***2 を通過し、SQL プロファイラーの詳細イベントで、何がクエリされているかを再度確認します。

私は属性のセットが異なると信じているので、 ** 1 ではいくつかの集計を使用し、タプルに「値」が存在する場合は * * 2 - この属性のセットには集計がありません。 、そのため、「集計からの読み取り」を 1 回行う代わりに、「メジャー グループ キャッシュからの読み取り」を数回行います。

私はあなたの立方体を持っていないので、正確には言えません。「サブキューブの詳細なクエリ」イベントでこれを見つけ出し、BIDS Helper を使用して必要な集計を手動で (特定の属性セットを使用して) 作成してみてください。役立つ場合があります。

于 2013-05-23T11:35:10.653 に答える