2009-02-27 7 views
0

Ich bin neu in MDX und versuche, das folgende Problem zu lösen. Untersucht berechnete Mitglieder, Subselects, Scope-Statements usw., kann es aber nicht ganz machen, was ich will.MDX entspricht SQL-Unterabfragen mit Aggregation

Sagen wir, ich versuche mit dem MDX entspricht der folgenden SQL-Abfrage zu kommen:

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 

Mit anderen Worten, ich habe ein Konto Buch, wo ich Verrechnungen Transaktionen verbergen (innerhalb someEntity2), Berechnen Sie dann die Aktiva & Verbindlichkeiten, nachdem sie von someEntity2 aggregiert wurden. Dann möchte ich die Gesamtsumme dieser Vermögenswerte sehen & Verbindlichkeiten von der größeren Einheit, someEntity1 aggregiert.

In meinem MDX-Schema hätte ich vermutlich einen Würfel mit Dimensionen für einigeEntity1 & someEntity2, und MarketValue wäre meine Faktentabelle/Maßnahme. Ich nehme an, ich könnte einen anderen DSV erstellen, der das tut, was meine Unterabfrage tut (Rechennetz), und einfach einen Würfel damit als meine Maßdimension erstellen, aber ich frage mich, ob es einen besseren Weg gibt. Ich hätte lieber keine 2 Würfel (einen für diese Nettoberechnungen und einen anderen, um für andere Anwendungsfälle auf eine niedrigere Granularitätsstufe zu wechseln), da es viele doppelte Informationen in meiner Datenbank geben wird. Diese werden sehr große Würfel sein.

Antwort

0

Ich denke, Sie sollten die Aggregationslogik auf den Würfel verlassen - das ist es, was es am besten tut.

In Ihrem Fall würde ich eine Konto Dimension erstellen, und dann würde ich add Account Intelligence. Dies funktioniert jedoch nur für die Enterprise Edition von SQL Server (2005 und höher).

Wenn Sie die Standard-Edition haben, ist der kanonische Weg dazu to use unary operators.

So haben wir es mit Sql Server 2000 gemacht, und here haben Sie ein großartiges Beispiel.

0

Ich denke, was Sie wollen, ist nicht zwei Würfel, sondern ein Würfel mit zwei Faktentabellen (manchmal ein Konstellationsschema genannt). Die Frage wurde vor Monaten geschrieben, daher werde ich hier nicht näher darauf eingehen, es sei denn, jemand bittet um weitere Informationen.