4

後で SSRS で使用する MDX クエリを作成しようとしています。動作する基本的なクエリから始めるには:

Select NON EMPTY {
[Measures].[Score %]
,[Measures].[Month Key]
} on Columns,
NON EMPTY {
([Date].[YMD].[Month Name].&[201301])
* FILTER([Customer].[Customer Full Name].[Customer Full Name].members,
        ([Measures].[Score %], [Date].[YMD].&[201301]) <> null
    AND ([Measures].[Score %], [Date].[YMD].&[201301]) <> 0 ) 
} on Rows

from [Cube]

しかし、これは1ヶ月限定です。SSRS では、複数の月を選択できるようにしたいので、クエリを次のように変更しました。

Select NON EMPTY {
 [Measures].[Score %]
,[Measures].[Month Key]
} on Columns,
NON EMPTY {
([Date].[YMD].[Month Name].&[201301] : [Date].[YMD].[Month Name].&[201307])
* FILTER([Customer].[Customer Full Name].[Customer Full Name].members,
        ([Measures].[Score %], ([Date].[YMD].&[201301] : [Date].[YMD].&[201307]))<> null
    AND ([Measures].[Score %], ([Date].[YMD].&[201301] : [Date].[YMD].&[201307])) <> 0 )
} on Rows

from [Cube]

しかし、ここでエラーが発生します。<> 関数では、1 つの引数に文字列または数値式が必要です。タプル セット式が使用されました。

私が理解している限り、それは、1か月を期待するセットで複数の月を返すためです。だから私は次のクエリを書きます:

With
Set [QC relation]
as FILTER([Customer].[Customer Full Name].[Customer Full Name].members,
          ([Measures].[Score %], [Date].[YMD].currentmember) <> null
    AND   ([Measures].[Score %], [Date].[YMD].currentmember) <> 0 ) 

Select NON EMPTY {
 [Measures].[Score %]
,[Measures].[Month Key]
} on Columns,
NON EMPTY {
([Date].[YMD].[Month Name].&[201301] : [Date].[YMD].[Month Name].&[201307]) 
* [QC relation]
} on Rows

from [Cube]

しかし、ここではフィルターが正しく機能していないようです。各月のデータにスコアを含むすべての行を返すため、多くの null 値があります。

null 値なしで各月の適切な結果を得るにはどうすればよいですか? SQLServer2008でSSMS/SSASを使用しています

ありがとう

4

1 に答える 1

6

クエリを作り直すと、最終的にこれになります。どうなるか教えてください。

SELECT NON EMPTY 
{
     [Measures].[Score %]
    ,[Measures].[Month Key]
} ON COLUMNS,
NON EMPTY 
{
    ([Date].[YMD].[Month Name].&[201301] : [Date].[YMD].[Month Name].&[201307])
    * 
    FILTER
    (
        [Customer].[Customer Full Name].[Customer Full Name].members,
        SUM({[Date].[YMD].CURRENTMEMBER}, [Measures].[Score %])<> null
        AND 
        SUM({[Date].[YMD].CURRENTMEMBER}, [Measures].[Score %])<> 0
    )
} ON ROWS
FROM [Cube]

または、さらに単純なバージョンが機能する可能性があります。

SELECT NON EMPTY 
{
     [Measures].[Score %]
    ,[Measures].[Month Key]
} ON COLUMNS,
NON EMPTY 
{
    ([Date].[YMD].[Month Name].&[201301] : [Date].[YMD].[Month Name].&[201307])
    * 
    FILTER
    (
        [Customer].[Customer Full Name].[Customer Full Name].members,
        [Measures].[Score %] <> null
        AND 
        [Measures].[Score %] <> 0
    )
} ON ROWS
FROM [Cube]

編集:3回目の試み、これがうまくいくかどうか見てみましょう:

SELECT NON EMPTY 
{
     [Measures].[Score %]
    ,[Measures].[Month Key]
} ON COLUMNS,
NON EMPTY 
{
    ([Date].[YMD].[Month Name].&[201301] : [Date].[YMD].[Month Name].&[201307])
    * 
    [Customer].[Customer Full Name].[Customer Full Name].members
} 
HAVING  [Measures].[Score %] <> null
AND [Measures].[Score %] <> 0
ON ROWS
FROM [Cube]
于 2013-08-09T09:21:29.917 に答える