2010-03-03 4 views
2

Я относительно новичок в MDX, и я пытаюсь выполнить то, что, по моему мнению, должно быть легко, но я не нашел никакого решения.Расчетная мера/размер

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

Хитрость здесь это на уровне строк детализации и что-то вроде

С ЧЛЕНАМИ Measures.PositivePNL как IIF (Measures.PNL> 0, Measures.PNL, 0)

не работает поскольку это работает только с суммарным номером

ответ

1

Если вы хотите что-то сделать в MDX на уровне детализации строки, вам понадобится измерение, содержащее идентификатор таблицы фактов (так что каждый член измерения представляет собой строку в факте Таблица). Затем вы можете написать расчёт:

WITH MEMBER Measures.PositivePNL as 
' 
Sum([DimFactId].[DimFactId].Members, IIF(Measures.PNL > 0, Measures.PNL, 0)) 
' 

Но это может быть медленным, если у вас много строк в таблице фактов. Альтернативой является добавление столбца в таблицу фактов, содержащую только положительные значения PNL.

2

Я должен был упомянуть, что я использую Mondrian/MySQL. Я пришел к подобному выводу, но нашел способ создать новое вырожденное измерение, используя SQL ключевого выражения (так что я на самом деле не нужен, чтобы добавить столбец в таблицу):

<Dimension name="PNLCategory"> 
    <Hierarchy hasAll="true"> 
     <Level name="PNLCategory" column="pnlCategory" uniqueMembers="true"> 
      <KeyExpression> 
       <SQL dialect="generic"> <![CDATA[IF(pnl >= 0,'Winner','Loser')]]></SQL> 
      </KeyExpression> 
     </Level> 
    </Hierarchy> 
</Dimension> 

Теперь становится легко сделать вычисленным член:

<CalculatedMember name="WinnersCountByPNL" aggregator="count" dimension="Measures"> 
    <Formula>([PNLCategory].[Winner], Measures.PNL)</Formula> 
    <CalculatedMemberProperty name="FORMAT_STRING" value="$#,###"/> 
    <CalculatedMemberProperty name="DATATYPE" value="Numeric"/> 
</CalculatedMember>  

так вот ограничить суммирование только «победителей» и преимуществом является то, что Mondrian не будет получать счета (факт) записей из таблицы строк.

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