Создаю куб в SQL Server Analysis Services; возникла следующая проблема.
Есть измерение D и мера M, связанные как многие-ко-многим (что важно).
Мне нужно задать вычисляемую меру по формуле M/Σ(M), где Σ — сумма всех фактов меры, ассоциированных хотя бы с одним из членов текущего измерения. Например, общая сумма по мере M у меня около 3 000 000, в то время как следующий запрос возвращает около 120 000:
SELECT [Measures].[M] ON 0
FROM [MyCube]
WHERE [D].[All].CHILDREN
Как видно из примера, вычислять правильную сумму отдельно я научился — всего-то и нужно взять не весь куб, а его слайс, ограниченный всеми членами измерения.
Но вот как вычислить эту сумму внутри вычисляемой меры? Вот упрощённый пример запроса, который, как я думал, будет работать:
CREATE MEMBER [Measures].[Calc] AS
[Measures].[M] / ( DRILLUPLEVEL( AXIS( 1 ).ITEM( 0 ).HIERARCHY.MEMBERS ).ITEM( 0 ), [Measures].[M] )
WHERE DRILLUPLEVEL( AXIS( 1 ).ITEM( 0 ).HIERARCHY.MEMBERS ).ITEM( 0 ).CHILDREN
Но, конечно же, MDX не позволяет использовать WHERE в объявлении MEMBER'а.
Подскажите, пожалуйста, есть ли другие способы ограничения слайса для вычисляемой меры?