私は 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 つのキューブ (1 つはこれらの正味の計算用、もう 1 つは他のユース ケースでより低いレベルの粒度に移動するため) を持たない方がよいでしょう。これは、データベース内で多くの重複情報になるためです。これらは非常に大きな立方体になります。