2010-10-20 4 views
2

Исходя из this question regarding calculating a member меня 2 вычисляемых элементов определяется как:Определяемые пользователем иерархии в MDX запроса

MEMBER [Asset].[Class].[Fixed Income Derivatives] 
AS 
AGGREGATE(
    { 
     [Asset].[Class].&[Fixed Income], 
     [Asset].[Sub Class].&[Derivatives] 
    }, 
    [Measures].CurrentMember 
) 
MEMBER [Asset].[Class].[Fixed Income Non-derivatives] 
AS 
AGGREGATE(
    { 
     [Asset].[Class].&[Fixed Income], 
     EXCEPT([Asset].[Sub Class].[Sub Class],[Asset].[Sub Class].&[Derivatives]) 
    }, 
    [Measures].CurrentMember 
) 

я могу использовать их в запросе MDX следующим образом:

SELECT 
    { 
    [Measures].[Market Value] 
    } ON 0, 
    NON EMPTY 
    { 
    [Asset].[Class].[Fixed Income Derivatives], 
    [Asset].[Class].[Fixed Income Non-derivatives] 
    [Asset].[Class].[Class] 
    } ON 1 
    FROM [Asset] 

И это дает я выхожу следующим образом:

Class-----------------------|-MarketValue 
============================|============= 
Fixed Income Derivatives | 12345 
Fixed Income Non-derivatives| 54321 
Fixed Income    | 66666 
Property     | 123 
Equity      | 987 

Обратите внимание, что первые 2 строки на самом деле являются составными частями строки 3. Теперь я могу сделайте некоторую магию с клиентским кодом, который читает эти данные, чтобы превратить эту таблицу в иерархию, но ... и вот вопрос - могу ли я сделать это с помощью MDX? Или я просто усложняю вещи? Я не отрицателен при внесении изменений в куб, если это необходимо, или если бы я мог определить эту иерархию.

ответ

0

Я в конечном итоге просто возвращается как класса и подклассов, а также создание иерархии в клиентском коде.

0

AFAIK, вы не можете использовать MDX, чтобы получить результат, который предполагается как иерархия на стороне клиента, без магии с кодом клиента или изменения структуры куба. Несмотря на то, что вы можете найти трюк, чтобы подделать клиенту результат как иерархию, я не предлагаю вам идти этим путем.

Вот мое предложение. Если я правильно понимаю, вы хотите получить результат, который является разновидностью несбалансированного дерева иерархии, которое выглядит ниже.

[активов]. [Класс]

  • [с фиксированным доходом]
    • [активов]. [Класс]. [Фиксированные Производные дохода]
    • [активов]. [Класс] . [Fixed Income непроизводными]
  • недвижимости
  • Equity

Этот вид несбалансированных деревьев может быть реализован только иерархиями parent-child.

Вы можете попытаться сбалансировать иерархию, добавив промежуточный уровень (или уровни листьев), который включает в себя Property и Equity членов или создать иерархию родитель-младший, чтобы достичь еще более глубокого уровня неуравновешенного дерева.

Редактировать

Вот article о размерах родитель-ребенок.

+0

У одного узла есть дети (Fixed Income), а у 3 узлов нет. Это определение несбалансированного дерева? – Jamiec

+0

Я обновил свой ответ, чтобы добавить ссылку на статью о размерах родитель-ребенка и несбалансированных иерархиях. – orka

0

Возможно добавление вычисляемого элемента таким образом:

WITH MEMBER [Asset].[Class].[Fixed Income].[Derivatives] AS ... 
+0

попробовал один ... Fixed Income - нижняя часть иерархии, насколько это касается, и не позволит мне добавлять дополнительных детей. – Jamiec

Смежные вопросы