У меня есть Расчетная мера MDX , которая динамически вычисляется в случае, когда в операторе указывается текущее значение члена измерения.
CREATE MEMBER CURRENTCUBE.[Measures].[CALC_MEASURE] AS
CASE WHEN [Dim].[Dim].CURRENTMEMBER.MEMBERVALUE = 'B' THEN [Measures].[B measure]
WHEN [Dim].[Dim].CURRENTMEMBER.MEMBERVALUE = 'A' THEN [Measures].[A measure]
WHEN [Dim].[Dim].CURRENTMEMBER.MEMBERVALUE = 'E' THEN [Measures].[E measure]
ELSE SUM(YTD(),[Measures].[Else Measure]) END;
Очевидно, что если я не извлекаю [Dim] Dimension
в Dataset
, вычисленное Measure
всегда будет иметь значение = (null)
.
Наши клиенты спрашивали нас, можно ли избежать извлечения [Dim] измерения (так что они могут иметь только одну строку в своем отчете) и при этом иметь правильное значение для вычисляемой меры, поэтому мы подумали, что можем использовать функцию SCOPE , но, к сожалению, она не работает должным образом.
Я создал две области только для тестирования, и в результате это выглядит примерно так:
SCOPE({[Dim].[Dim].&[B]});
[Measures].[CALC_MEASURE] = 10;
END SCOPE;
SCOPE({[Dim].[Dim].&[B],[Dim].[Dim].&[A]});
[Measures].[CALC_MEASURE] = 10 + 20;
END SCOPE;
В разделе просмотра, если я отфильтрую только одно из значений измерения [Dim] 'A' например, я получаю (10 + 20) значение.
Я ожидал, что этот запрос вернется (null), потому что у меня нет такой области видимости:
SCOPE({[Dim].[Dim].&[A]});
[Measures].[CALC_MEASURE] = 20;
END SCOPE;
Почему это так? Как я могу использовать фильтрацию области для ОБА значений измерений? Я хочу ввести в область действия A + B, только если я отфильтрую значения измерений «A» и «B» в разделе обзора.
У вас есть другие идеи для решения этой проблемы? проблема?
Заранее спасибо Всем, кто ответит,
Габриэле