4

MDX で FILTER 関数がどのように機能するかを理解するのに苦労しています。

これは、すべての暦年のすべての販売地域の国について、空でないすべての Internet Order Count 値を取得するクエリです。

    SELECT 
    NON EMPTY 
    {
        Filter
        (
        {[Date].[Calendar].[Calendar Year].MEMBERS}
        ,
        [Measures].[Internet Order Count] > 0
        )
    } ON COLUMNS
    ,[Sales Territory].[Sales Territory].[Country].MEMBERS
ON ROWS
FROM [Adventure Works]
WHERE 
    [Measures].[Internet Order Count];

これにより、0 でフィルタリングしているため、すべての注文が得られ、結果は以下のようになります。

                CY 2010,CY 2011,CY 2012,CY 2013,CY 2014
France,         1      ,140    ,359    ,"1,917",67
Germany,               ,175    ,339    ,"1,909",61
United Kingdom ,1      ,175    ,405    ,"2,377",73
Canada,         1      ,170    ,169    ,"2,856",179
United States,  5      ,770    ,867    ,"7,590",335
Australia,      6      ,786    ,"1,130","4,640",156

現在、画像のアップロードに制限があるため、csv 形式で結果を入力しています。私は MDX を初めて使用します。私の目標は、インターネット注文数が 180 を超えるこの結果セットをフィルター処理することです。

したがって、クエリをこれに変更しました-

SELECT 
  NON EMPTY 
    {
      Filter
      (
        {[Date].[Calendar].[Calendar Year].MEMBERS}
       ,
        [Measures].[Internet Order Count] > 180
      )
    } ON COLUMNS
 ,[Sales Territory].[Sales Territory].[Country].MEMBERS
ON ROWS
FROM [Adventure Works]
WHERE 
  [Measures].[Internet Order Count];

これにより、以下の出力が得られました-

                CY 2011,CY 2012,CY 2013,CY 2014
France,         140    ,359    ,"1,917",67
Germany,        175    ,339    ,"1,909",61
United Kingdom ,175    ,405    ,"2,377",73
Canada,         170    ,169    ,"2,856",179
United States,  770    ,867    ,"7,590",335
Australia,      786    ,"1,130","4,640",156

基本的に CY 2010 のエントリは除外されますが、(France,CY 2011),(Germany, CY 2011),(UK, CY 2011), (Canada, CY 2011) などのエントリ/空白値は含まれないと予想されます。もちろん、CY 2014 に属する一部のエントリでも同様の結果が得られました。

AdventureWorksDW2014 キューブを使用しています。どうすればこれを行うことができますか?

4

2 に答える 2

4

国ディメンションではなく、インターネット注文数が 180 を超える年のみをフィルタリングしています。これを試して:

SELECT 
    NON EMPTY [Date].[Calendar].[Calendar Year].MEMBERS ON COLUMNS,
    [Sales Territory].[Sales Territory].[Country].MEMBERS ON ROWS
FROM (
    SELECT
        Filter (
            (
                [Date].[Calendar].[Calendar Year].MEMBERS , 
                [Sales Territory].[Sales Territory].[Country].MEMBERS
            ),
            [Measures].[Internet Order Count] > 180
        ) ON 0
    FROM [Adventure Works]
)
WHERE 
    [Measures].[Internet Order Count]
于 2015-07-20T10:43:56.310 に答える
3

最初のスクリプトは、実際には次のとおりです。カウントであるため、フィルターは必要ありません。したがって、<0 は発生しません。

SELECT 
  NON EMPTY 
    [Date].[Calendar].[Calendar Year].MEMBERS ON 0
 ,[Sales Territory].[Sales Territory].[Country].MEMBERS ON 1
FROM [Adventure Works]
WHERE 
  [Measures].[Internet Order Count];

これの私の古いバージョンでAdvWrksは、次のようになります。

ここに画像の説明を入力

AI は実際に、あなたが次のようになっていると考えています。

WITH 
  MEMBER [Measures].[transformToNull] AS 
    IIF
    (
      [Measures].[Internet Order Count] <= 180
     ,null
     ,[Measures].[Internet Order Count]
    ) 
SELECT 
  NON EMPTY 
    {[Date].[Calendar].[Calendar Year].MEMBERS} ON COLUMNS
 ,[Sales Territory].[Sales Territory].[Country].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE 
  [Measures].[transformToNull];

結果は次のとおりです。

ここに画像の説明を入力

于 2015-07-20T11:23:00.983 に答える