2

Analysis Servicesには、過去3つの期間に基づいた場所の1日の平均収益を返す計算されたメジャーがあります。期間は場所によって定義された期間であるため、ある場所では月ごとに期間を閉じ、別の場所では四半期ごとに期間を閉じることができます。

1日の平均収益を返すために、ある期間の収益とその期間に寄与する日数を返すfactPeriodsテーブルがあります。次のMDXは、ロケーションレベルで正しい値を返します([Measures]。[Days In AR Charges])/([Measures]。[Days In AR Days])。

問題は、より高いレベルにロールアップする場合です。たとえば、州ごとの1日の平均収益を返したい場合、最初に期間に寄与する日数を集計してから除算するため、計算が正しくありません。最初に最低レベルで平均化を行い、次に1日の平均収益の結果を合計したいと思います。これは、何が起こるかと私が何をしたいのかという例です。

AとBの2つの場所しかないとします。Aは毎月閉店し、Bは四半期ごとに閉店します。最後のクローズの結果は次のとおりです。

場所/収益/収益に貢献する日数

場所A/$3000/30日場所B/$1800/90日

ロケーションAは1日あたり100ドルの収益を生み出しており、ロケーションBは1日あたりわずか20ドルの収益を生み出しています。私の合計は120ドルになるはずです。代わりに、1日あたり40ドルを返します。これが計算レベルで起こることです。

数式を擬似コードSUM(([Measures]。[Days In AR Charges])/([Measures]。[Days In AR Days]))にしたいと思います

しかし、実際には(SUM([Measures]。[Days In AR Charges]))/(SUM([Measures]。[Days In AR Days]))

誰かが私がこれを望み通りに機能させるための適切な式を決定するのを手伝ってもらえますか?最終的には、$ 4800/120日ではなく、$100/日+$20/日になるはずです。子孫を使用する必要があるのではないかと疑っていますが、子孫をどのように使用するのか、またはそれが正しい方向であるかどうかはわかりません。

4

6 に答える 6

3

強制的にリーフ レベルで計算を実行してからロールアップする最も簡単な方法は、計算を CALCULATE の前に移動することです。MDX スクリプトのステートメント。

通常は、CALCULATE を終了する必要があります。スクリプトの最初のステートメントにする必要がありますが、あなたが説明する状況は、CALCULATE; の前に計算されたメンバーを持つことが正当化される例外の 1 つだと思います。

于 2009-02-05T05:34:55.707 に答える
2

カスタム メンバー式の操作

http://msdn.microsoft.com/en-us/library/ms174474%28SQL.90%29.aspx

于 2009-11-17T13:18:57.750 に答える
1

パフォーマンスが向上するため、ETL または処理で必要な数値を取得できる場合は、SSAS 計算を使用しないでください。

この場合、DSV 計算を追加して除算を行い、SSAS が通常どおり合計できるようにします。

于 2009-04-22T11:34:38.050 に答える
0

私の当面の解決策は、ETL プロセスで 1 日の平均収益を計算することです。SSAS は値を合計するだけです。誰かがそれを知っていれば、問題に対するMDXソリューションを見たいと思っています。

于 2009-02-03T21:18:28.033 に答える
0

これは、計算で適切な「解決順序」を指定するだけの問題です。キューブ構造が何であるかがわからないため、問題を解決するための特定の MDX を提供することはできませんが、ドキュメントまたは Google で「解決順序」を調べてください。これはまさに「解決順序」が対処することになっているものです。基本的に、最初に何をすべきかを Analysis Services に指示します。

于 2009-02-04T00:52:31.517 に答える
-2

1つの式を3つの別々の式に減らしますか? 1 つは分子、もう 1 つは分母、そして 3 番目は割り算を計算しますか? あなたが話しているツールがわからないので、複数の計算を順番に実行できるかどうかはわかりません。しかし、それは確かにあなたのために注文を強制するでしょう.

于 2012-04-01T18:58:57.473 に答える