2009-02-27 9 views
0

私はMDXを初めて使用し、次の問題を解決しようとしています。調査された計算されたメンバー、副選択、範囲のステートメントなどを調査しましたが、私が望むことをするためにそれを得ることはできません。集計を使用したSQLサブクエリに相当するMDX

はの私は、次のSQLクエリにMDX相当を思い付くしようとしているとしましょう:言い換えれば

SELECT SUM(netMarketValue) net, 
    SUM(CASE WHEN netMarketValue > 0 THEN netMarketValue ELSE 0 END) assets, 
    SUM(CASE WHEN netMarketValue < 0 THEN netMarketValue ELSE 0 END) liabilities, 
    SUM(ABS(netMarketValue)) gross 
    someEntity1 
FROM (
SELECT SUM(marketValue) netMarketValue, someEntity1, someEntity2 
FROM <some set of tables> 
GROUP BY someEntity1, someEntity2) t 
GROUP BY someEntity1 

、私は、私が(someEntity2以内)の内部相殺取引を隠しアカウント台帳を持っていますsomeEntity2によって資産を集計した後で資産&を計算します。次に、その資産の総額を参照したいと考えています&負債は、より大きなエンティティsomeEntity1によって集計されます。

私のMDXスキーマでは、おそらくsomeEntity1 & someEntity2のディメンションを持つキューブがあり、marketValueは私のファクトテーブル/メジャーになります。私は私のサブクエリが(ネットを計算する)ことをした別のDSVを作成し、単純にそれを私のメジャーディメンションとして作成することができますが、より良い方法があるのだろうかと思います。私はむしろ2つの立方体(これらの正味の計算のためのものと、他のユースケースのためのより細かい粒度のものへ行くためのもの)を持っていないでしょう、それは私のデータベースに重複した情報がたくさんあるからです。これらは非常に大きな立方体になります。

答えて

0

私はキューブに集約ロジックを残すべきだと思います。

あなたのケースでは、私はアカウントディメンションを作成し、次にadd Account Intelligenceとします。ただし、これはSQL Serverのエンタープライズ版(2005以上)でのみ機能します。

標準版がある場合、これを行う正規の方法はto use unary operatorsです。

これはSql Server 2000でこれを行う方法ですが、hereの例があります。

0

あなたは2つのキューブではなく、2つのファクトテーブル(コンスタレーションスキーマとも呼ばれます)を持つ1つのキューブが必要だと思います。質問は数ヶ月前に書かれたので、誰かがもっと情報を求めない限り、私はここで詳しく説明しません。

関連する問題