2012-09-16 53 views
0

建立在previous question上,我试图实现以下结果集以用于SSRS 2008报告。SSAS/SSRS 2008:MDX显示测量如果在日期范围内

 Utilisation New Measure 
Apr-12 70.7%  70.7% 
May-12 74.5%  74.5% 
Jun-12 74.6%  74.6% 
Jul-12 76.7%  76.7% 
Aug-12 79.5%  79.5% 
Sep-12 78.5%  (null) 
Oct-12 79.0%  (null) 
Nov-12 79.6%  (null) 
Dec-12 78.9%  (null) 
Jan-13 79.7%  (null) 
Feb-13 79.0%  (null) 
Mar-13 79.4%  (null) 

MDX查询我至今如下:

WITH MEMBER [Measures].[New Measure] 
    AS IIF(
     ISEMPTY(
      EXISTS(
        [Date].[Fiscal Year-Month].[Fiscal Month].CurrentMember 
        , {[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[1] 
         :[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[5]} 
        ) 
       ) 
      , NULL 
      , [Measures].[Utilisation] 
      ) 
      , FORMAT_STRING = "0.0%" 

SELECT  { 
      [Date].[Fiscal Year-Month].[2012/13].children 
      } ON ROWS 

      , 
      { 
      [Measures].[Utilisation] 
      , [Measures].[New Measure] 
      } ON COLUMNS 

FROM  [Elective] 

虽然新措施会返回相同的结果利用的措施,并不会返回我不想几个月空值值。

回答

2

你接近,但没有语法完全正确。试试这个:

WITH MEMBER [Measures].[New Measure] 
    AS IIF(
      EXISTS(
        {[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[1] 
        :[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[5]}, 
        [Date].[Fiscal Year-Month].[Fiscal Month].CurrentMember 
        ).Count = 1 
      , [Measures].[Utilisation] 
      , NULL 
      ) 
      , FORMAT_STRING = "0.0%" 

SELECT  { 
      [Date].[Fiscal Year-Month].[2012/13].children 
      } ON ROWS 

      , 
      { 
      [Measures].[Utilisation] 
      , [Measures].[New Measure] 
      } ON COLUMNS 

FROM  [Elective] 

随着EXISTS功能,第一个参数是全套检查 - 你想要的值显示日期范围 - 第二个参数是行目前的成员,所以你需要做与你最初尝试的相反。 EXISTS函数返回一个集合,所以你可以使用COUNT函数来查看集合是否有某些东西(当前成员),当匹配时它应该只有1。 ISEMPTY不适合您的原因是MDX在计算中包括当前度量,并且当当前日期成员和Utilization度量存在值时,表达式将解析为false并返回Utilization。

+0

非常好,谢谢你的解决方案并解释我做错了什么。 Benoit发布的解决方案也适用。 – mheptinstall

+0

从性能角度来说,Rank是一个昂贵的功能。随着您的多维数据集的增长,您可能会发现它成为一个问题。 – Stacia

+0

感谢您的进一步信息。 – mheptinstall

1

可以使用Rank功能:

WITH MEMBER [Measures].[New Measure] 
    AS IIf(Rank(([Date].[Fiscal Year-Month].[Fiscal Month].CurrentMember) 
       , [Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[1]:[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[5] 
       ) < 1 
      , NULL 
      , [Measures].[Utilisation] 
      )