MDX在每个日期成员上运行总计

时间:2016-02-03 07:20:05

标签: ssas mdx

我使用以下MDX计算来获取每天的股票价值:

    SUM({NULL:[Date].[Calendar Hierarchy].CURRENTMEMBER} * [Measures].[Qty])

然而,这给了我以下结果

Date QtyOnHand

2015年1月1日10

2015年4月1日15

2015年5月1日16

标记未显示日期2/1/2015和3/1/2015,因为它们上没有任何交易。 我希望这些显示得到以下结果:

Date QtyOnHand

2015年1月1日10

2015年2月1日10

2015年3月1日10

2015年4月1日15

2015年5月1日16

如何将MDX语句调整为此?

1 个答案:

答案 0 :(得分:0)

IsEmpty有帮助吗?

SUM(
  {NULL:[Date].[Calendar Hierarchy].CURRENTMEMBER} 
* IIF(
   IsEmpty([Measures].[Qty])
   ,0
   ,[Measures].[Qty]
  )
)

如果它有帮助那么它将无助于表现。

我已经测试了上述内容,并且不确定为什么在Sum内进行交叉连接 - 更多标准就是使用第二个参数。

AdvWrks脚本是您的方案的一个示例,即数据中存在空白:

SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
 ,{
      [Date].[Calendar].[Date].&[20050801]
    : 
      [Date].[Calendar].[Date].&[20051201]
  } ON 1
FROM [Adventure Works];

以下是使用IsEmpty(带IIF)的查询:

WITH 
  MEMBER [Measures].[roll] AS 
    Sum
    (
      {[Date].[Calendar].[Date].&[20050801] : [Date].[Calendar].CurrentMember}
     ,IIF
      (
        IsEmpty([Measures].[Internet Sales Amount])
       ,0
       ,[Measures].[Internet Sales Amount]
      )
    ) 
SELECT 
  {[Measures].[Internet Sales Amount],[Measures].[roll]} ON 0
 ,{
      [Date].[Calendar].[Date].&[20050801]
    : 
      [Date].[Calendar].[Date].&[20051201]
  } ON 1
FROM [Adventure Works];

部分结果如下:

enter image description here

所以在你的场景中我认为这非常相似:

SUM(
  {NULL:[Date].[Calendar Hierarchy].CURRENTMEMBER} 
, IIF(
   IsEmpty([Measures].[Qty])
   ,0
   ,[Measures].[Qty]
  )
)