EXCEL中的MDX CASE语句

时间:2019-01-16 12:14:25

标签: excel mdx olap

我正在访问Excel中OLAP多维数据集中的数据,并尝试使用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 :(得分:0)

您需要进行以下更改。代替

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

您需要写

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

在查询中,您要基于容器大小的值选择乘数。为了获得当前正在评估的值,我们使用“ Currentmember”。另外,您正在检查CURRENTMEMBER的“ MEMBER_CAPTION”属性。检查值的方式将不起作用。 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