MDX CASE Заявление в EXCEL - PullRequest
       12

MDX CASE Заявление в EXCEL

0 голосов
/ 16 января 2019

Я обращаюсь к данным в кубе OLAP в Excel и пытаюсь использовать запрос MDX для создания новой вычисляемой меры в моей сводной таблице.

На основе размера контейнера мне нужно рассчитать емкость для этого конкретного размера контейнера.

Я использую оператор CASE, однако мой запрос игнорирует все предложения WHEN и использует предложение ELSE.

CASE 
WHEN [CONTAINER INSTANCE DIMENSION].[Container Size] = '20' THEN ([Measures].[Ocean Container COUNT]*33)
WHEN [CONTAINER INSTANCE DIMENSION].[Container Size]  = '20H' THEN ([Measures].[Ocean Container COUNT]*40)
WHEN [CONTAINER INSTANCE DIMENSION].[Container Size]  = '40H' THEN ([Measures].[Ocean Container COUNT]*69)
WHEN [CONTAINER INSTANCE DIMENSION].[Container Size]  = '40R' THEN ([Measures].[Ocean Container COUNT]*56)
ELSE ([Measures].[Ocean Container COUNT]*56)
END

Например: контейнеры 20Ft в сумме до 128, поэтому емкость должна быть 4224 (128 * 33); однако я получаю 7168 (128 * 56).

enter image description here

1 Ответ

0 голосов
/ 16 января 2019

Вам необходимо внести следующее изменение. Вместо

WHEN [CONTAINER INSTANCE DIMENSION].[Container Size] = '20' 

нужно написать

WHEN [CONTAINER INSTANCE DIMENSION].[Container Size].CurrentMember.MEMBER_CAPTION = '20'.

В вашем запросе вы хотите выбрать свой множитель на основе значения размера контейнера. Чтобы получить значение, которое оценивается в данный момент, мы используем «Currentmember». Кроме того, вы проверяете свойство «MEMBER_CAPTION» вашего CURRENTMEMBER. Способ проверки значения не будет работать. MDX оценит

[CONTAINER INSTANCE DIMENSION].[Container Size] = '20'

в true, поскольку вы оцениваете атрибут измерения по значению. Следовательно, ваше предложение Else дает результат.

Ниже приведен пример AdventureWorks.

with member 
[Measures].[Internet Sales AmountCase]
as
case 
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '38' then [Measures].[Internet Sales Amount]*1
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '40' then [Measures].[Internet Sales Amount]*2
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '46' then [Measures].[Internet Sales Amount]*3
else -99
end

select 
{[Measures].[Internet Sales Amount],[Measures].[Internet Sales AmountCase]}
on columns,

([Date].[Month of Year].[Month of Year],[Product].[Size].[38]:[Product].[Size].[70])
on rows 
from [Adventure Works]

Результаты: enter image description here

...