Я новичок в MDX и пытаюсь решить следующую проблему. Исследовал вычисленные члены, подвыборы, операторы области видимости и т. Д., Но не могу заставить его делать то, что я хочу.
Допустим, я пытаюсь найти MDX-эквивалент следующего SQL-запроса:
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, который выполнял бы то же, что и мой подзапрос (вычисление net), и просто создать куб с этим измерением моей меры, но мне интересно, есть ли лучший способ. Я бы предпочел не иметь 2 куба (один для этих сетевых вычислений и другой для перехода на более низкий уровень детализации для других вариантов использования), поскольку в моей базе данных будет много дублирующейся информации. Это будут очень большие кубики.