Я не знаю, возможно ли это или нет, или мои ограниченные знания MDX толкают меня в неверном направлении ...
Куб, с которым я имею дело, имеет два разных измерения дат: [Statement Dates] и [Premium Dates]. Далее в иерархии каждый выглядит так:
[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 никогда не будет равно «Some Category», поскольку единственной категорией продукта в контексте является «All Product Cateogories».
Одним из возможных способов решения проблемы было бы выполнение следующего расчета:
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]
Вы также можете выполнить задание с заданной областью в сценарии вычислений в своем кубе, чтобы делать такие вещи.