MDXクエリに問題があり、集計と計算されたメンバーの計算の優先順位に要約すると思います。
基礎となるデータから始めましょう。これは、評価(日付、およびメンバータイプ、スキームなどのその他のデータ、そしてこの質問にとって非常に重要な負荷係数)と関連する値を中心に展開します。
データ
評価表
Id | Valuation Date | Member Type | Scheme | Loading Factor
=============================================================
1 | 2010-01-01 | TypeA | Scheme X | 0.02
2 | 2010-01-01 | TypeB | Scheme X | 0.02
3 | 2010-01-01 | TypeA | Scheme Y | 0.02
4 | 2010-01-01 | TypeB | Scheme Y | 0.02
ValuationValueテーブル
ValuationId | Value
====================
1 | 1000.0
2 | 2000.0
3 | 3000.0
4 | 4000.0
これは、キューブにロードされると、MemberType、Scheme、およびdateの属性を持つ評価ディメンションを持ちます。そして、次のように、Valueメジャーを含むMeasureグループValuationValueと、LoadingFactorを含むValuationメジャーグループを持つキューブ:
Cube
-Measure Groups
- Valuation
|_Loading Factor
- ValuationValue
|_Value
- Dimensions
- Valuation
|_MemberType
|_Scheme
|_Date
質問
負荷率は値をロードするために使用されます。これは税金のように考えてください。したがって、0.02は「ロード量が値の2%である」ことを意味します。クエリからValueを返す場合、この値をロードする量も計算する必要があります。典型的なクエリは次のようになります
SELECT
{
[Measures].[Value]
} ON 0,
[Valuation].[Scheme] ON 1
FROM Cube
これにより2行が返され、上記のデータと比較するとわかるように、memberType全体で正しく合計されます。
Scheme | Value
=================
Scheme X | 3000.0
Scheme Y | 7000.0
さて、そのクエリで負荷率を計算しようとすると、すべてがうまくいきません-デモンストレーションします。次のクエリが与えられます:
WITH MEMBER [Measures].[Loading Value]
AS
(
[Measures].[Value] * [Measures].[Loading Factor]
)
SELECT
{
[Measures].[Value] ,
[Measures].[Loading Value]
} ON 0,
[Valuation].[Scheme] ON 1
FROM Cube
結果が出ます
Scheme | Value | Loading Value
=================================
Scheme X | 3000.0 | 120.0
Scheme Y | 7000.0 | 280.0
1000 * 0.02 + 2000 * 0.02 = 60
基本的に、何が起こっているのかというと、それは私の負荷係数を合計し、それを私の値の合計で乗算しているということです(上の最初の行は計算しているはずです3000 * 0.04 = 120
)。
これはもちろん不自然な例です。私の実際の構造はもう少し複雑ですが、これは問題を示していると思います。上記の例で計算されたメンバーは、値メジャーの集計の最後ではなく、行ごとに発生する必要があるという印象を受けました。
返信ありがとうございます。