0

私は次のMDXを持っています:

SELECT NON EMPTY 
       {
            [Measures].[My Measure]
       } ON COLUMNS 
FROM 
(
    SELECT 
           NONEMPTY(StrToMember(@StartDate,CONSTRAINED):StrToMember(@EndDate,CONSTRAINED)) 
           ON COLUMNS,

           NONEMPTY( STRTOSET(@Division)) 
           ON ROWS
    FROM
    (
        SELECT 
               NONEMPTY({[Project].[Project Status].&[Open],[Project].[Project Status].&[Closed]}) 
               ON COLUMNS,

               NONEMPTY(STRTOSET(@TargetLanguage)) 
               ON ROWS
        FROM [My Cube]
    )
    WHERE STRTOSET(@Project)
)
WHERE STRTOSET(@Requestor)

私の目標は次のとおりです: @StartDate、@EndDate、@Division、@TargetLanguage、@Project、@Requestor でフィルター処理します (プロジェクトのステータスをオープン/クローズドにフィルター処理することに加えて...)

これらを機能させる唯一の方法は、正しく表示される結果が得られるまで、サブキューブと軸をいじることです...ここでは、たとえば、2番目のサブ選択でできない理由がわかりません簡単に言えば:

Where STRTOSET(@TargetLanguage)

それを行に置く代わりに。非常に混乱しているため、これが正しいデータを返していることを100%確信することはできません...何か説明はありますか?Google はこれまで役に立たなかったので、サブキューブの行に物事を配置することは正しい解決策ではないと私は信じています...

ありがとう!

4

1 に答える 1

0

これを試して:

サブキューブを100%使用しているわけではありませんが、コードをリファクタリングしています。次と同じだと思います:

SELECT NON EMPTY 
       {
            [Measures].[My Measure]
       } ON COLUMNS 
FROM 
       [My Cube]
WHERE 
(
    STRTOSET(@Requestor),
    STRTOSET(@TargetLanguage), 
    {[Project].[Project Status].&[Open],[Project].[Project Status].&[Closed]},
    STRTOSET(@Division),
    {StrToMember(@StartDate,CONSTRAINED):StrToMember(@EndDate,CONSTRAINED)},
    STRTOSET(@TargetLanguage)
)

そして、実を言うと、最初の空でないものも必要ないようです。

私の見方では、内側のサブキューブはスライスをフィルタリングしているだけであり、メインフィルターに追加するのに十分簡単だと思います.

于 2013-03-07T02:41:15.147 に答える