SSAS/SSRS 2008:MDX 显示测量日期范围内的 IF



基于上一个问题,我正在尝试实现以下结果集,以便在 SSRS 2008 报告中使用。

       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]
尽管新度量值返回

的结果与利用率度量值相同,并且在我不想要值的月份不返回 Null。

你很接近,但语法不太正确。试试这个:

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 在计算中包含当前度量值,当当前日期成员和利用率度量值的值存在时,表达式解析为 false 并返回利用率。

您可以使用 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]
           )

最新更新