2008-10-29 3 views
1

я не знаю, если это возможно, или нет, или если мое ограниченное знание MDX толкает меня в неправильном направлении ...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.

ответ

3

Поскольку предложение WHERE оценивается сначала, функция .CurrentMember в IIF будет видеть только «Все каталоги продуктов». В этом случае [Продукты]. [Категория продукта] .CurrentMember.Name никогда не будет равно «Некоторая категория», поскольку единственной категорией продукта в контексте является «All 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] 

Вы также могли бы сделать контекстными в присваивания сценарии вычисления в кубе, чтобы сделать такого рода вещи.

Смежные вопросы