1

基于上一个问题,我试图实现以下结果集以在 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。

4

2 回答 2

3

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

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 并返回 Utilisation。

于 2012-09-17T06:33:21.870 回答
1

您可以使用排名功能:

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]
           )
于 2012-09-16T17:09:57.637 回答