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 関数では、最初の引数はチェックする完全なセット (値を表示する日付範囲) であり、2 番目の引数は行の現在のメンバーであるため、最初に試したこととは反対のことを行う必要があります。EXISTS 関数はセットを返すため、COUNT 関数を使用して、セットに何か (現在のメンバー) があるかどうかを確認できます。一致する場合は 1 のみになります。ISEMPTY が機能しない理由は、MDX が現在のメジャーを計算に含めており、現在の日付メンバーと使用率メジャーに値が存在する場合、式は false として解決され、使用率が返されるためです。

于 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 に答える