2009-08-18 10 views
2

Я очень новичок в MDX и понятия не имею, как подойти к этой проблеме. Я был бы признателен за любую помощь, даже если бы указатели на то, где объясняются соответствующие функции.MDX способность вычислять отношение сумм от дочерних уровней

Мне нужно уметь рассчитать отношение сумм, где числитель представляет собой тривиальную меру SUM, но знаменатель представляет собой сумму значений, зависящих от измерения. Для тех, кто осведомлен о страховой отрасли, это расчет «за каждого члена в месяц».

Наш размер времени, на самом низком уровне (месяц), имеет число «число членов», число которого соответствует числу. При просмотре месячного уровня наша мера - это простая сумма «платной суммы/членов за этот месяц». У нас нет этой проблемы, предварительно вычисляя отношения как столбец в таблице фактов и определяя меру SUM в этом столбце.

Однако при просмотре любого фрагмента выше месячного уровня эта сумма коэффициентов больше не применима. Скорее, мы нуждаемся в среднем платных сумм. Поэтому, если я смотрю на годовую ось, мне нужно добавить оплаченные суммы за все месяцы и разделить эту сумму на суммы членов за каждый месяц. Как я могу получить количество участников за каждый уникальный месяц и добавить их? У нас есть столбец в нашей таблице фактов для хранения этого ежемесячного значения, поэтому необходимая ценность есть.

Pseudo-SQL для вычисления этого знаменателя будет чем-то вроде «select sum (members) как знаменатель из группы избранных членов по месяцам».

Любые идеи?

ответ

1

Похоже, что number of members является числовым свойством на Time. Действительно, это, вероятно, должно быть мерой. Но я знаю, как все это происходит. Во всяком случае, я бы создать вычисляемый показатель для этого, например, так:

create member currentcube.[Measures].[Month Members] as 
    ([Time].[YQM].CurrentMember.Properties("number of members")), 
visible = 0; 

Тогда, я хотел бы сделать еще одну меру, которая была сумма, что через любой месяц вы находитесь в:

create member currentcube.[Measures].[Number of Members] as 
    sum(({Descendants([Time].[YQM].CurrentMember, [Time].[YQM].[Month]} 
     ,[Measures].[Month Members])), 
visible = 1; 

Теперь, ваш вопрос легко ответить по следующей формуле:

create member currentcube.[Measures].[Paid per members per month] as 
    ([Measures].[Paid])/([Measures].[Number of Members]), 
visible = 1; 

Однако, если бы я меня и имел конструкцию над этим, [число членов] будет уроженцем мерой, а не расчетный один. Производительность намного лучше, и это делает жизнь лот проще.

+0

Эрик, спасибо за ваш ответ. Одномерное свойство - это именно то, что я изучал с момента моего первоначального размещения, и, видя, что ваша идея предполагает, что то же самое обнадеживает. Позвольте мне включить это и сообщить вам результаты. – 2009-08-20 12:55:53