MDX: расчетные размеры?
-
05-07-2019 - |
Вопрос
Я не знаю, возможно ли это или нет, или мои ограниченные знания MDX толкают меня в неверном направлении ...
Куб, с которым я имею дело, имеет два разных измерения для дат: [Даты выписок]
и [Премиум-даты]
. Далее в иерархии каждый выглядит так:
[Statement Dates].[Statement Year].[2008]
[Payment Dates].[Payment Year].[2008]
Для бизнес-логики, которую я реализую, мне нужно сделать что-то вроде:
select
({ [Measures].[Commission] }) on columns,
({[Products].[Product Category]}) on rows
from [Cube]
where
(
IIF( [Products].[Product Category].CurrentMember.Name = "Some Category",
[Statement Dates].[Statement Year].[2008],
[Payment Dates].[Payment Year].[2008] )
)
Поэтому мне нужно определить, какое измерение использовать для фильтрации года, исходя из того, какая категория продуктов используется.
Это анализируется нормально, и запрос выполняется, но цифры, кажется, указывают на то, что оператор IIF
всегда возвращает false.
Решение
Поскольку предложение WHERE оценивается первым, функция .CurrentMember в IIF будет видеть только «Все категории продуктов». В этом случае [Products]. [Product Category] .CurrentMember.Name никогда не будет равно «Некоторая категория». единственной категорией продукта в контексте является «Все категории продуктов».
Один из возможных способов обойти это сделать следующий расчет:
WITH MEMBER Measures.Commission2 as
SUM(
{[Products].[Product Category].[Product Category].Members}
, IIF( [Products].[Product Category].CurrentMember.Name = "Some Category"
, ([Statement Dates].[Statement Year].[2008],[Measures].[Commission])
, ([Payment Dates].[Payment Year].[2008].[Measures].[Commission]) )
)
select
({ [Measures].[Commission2] }) on columns
, ({[Products].[Product Category]}) on rows
from [Cube]
Вы также можете выполнить задание с заданной областью в скрипте вычисления в вашем кубе, чтобы сделать подобные вещи.