MDX:计算尺寸?

时间:2008-10-29 20:59:58

标签: filtering mdx where dimensions

我不知道这是否可能,或者我对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。

1 个答案:

答案 0 :(得分:3)

因为首先评估WHERE子句,所以IIF中的.CurrentMember函数只能看到“所有产品类别”。在这种情况下,[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]

您还可以在多维数据集的计算脚本中执行作用域分配来执行此类操作。