2017-06-08 10 views
1

私はBI分野をかなり新しくしており、OLAP、Cubes、MDXの最初のステップを踏んでいます。年齢バケットのMDX IIFステートメントの予期しない転倒

今のところ私は頭がおかしくないと思っているような些細な問題に悩まされており、助言を求めるのが大変です。

年齢バケット内の在庫アイテムを、アイテムが最後に販売された日付と指定されたレポート日付との間の年数によって整理したいと考えています。私はバケツ[0..6]月、[6..12]ヶ月など、この目的のために年齢バケット次元を作成しました。

次に、私は、アイテムは、一致年齢バケットの(0、1、2、3、4)、日ItemAgeSalesに基づいて次のよう

CREATE MEMBER CURRENTCUBE.[MEASURES].[TEST] AS NULL, 
VISIBLE = 1, ASSOCIATED_MEASURE_GROUP = 'Item Transaction'; 

SCOPE(MEASURES.[TEST]); 
(STRTOMEMBER("[Age Bucket].[Age Bucket].&[" + 
    IIF([MEASURES].[ItemAgeSales] >= 730 , "4", 
     IIF([MEASURES].[ItemAgeSales] >= 548 , "3", 
      IIF([MEASURES].[ItemAgeSales] >= 365 , "2", 
       IIF([MEASURES].[ItemAgeSales] >= 183 , "1", "0" 
       )//1,0 
      )//2 
     )//3 
    )//4 
+ "]") 
) 
= [MEASURES].[ItemAgeSales]; 
END SCOPE; 

上記のスクリプトに問題があり、その関係なく値のアイテムのItemAgeSalesメジャーでは、アイテムは常にバケット '0'(つまり[0..6]月)に落ちますが、これがどうして正確なのかはわかりません。

誰かが私が間違っていることを見たり、この問題やヒントを問題解決に向けて参考にしていますか?どんな助けでも大歓迎です!

Image of Cube Browser showing that ItemAgeSales is always set for the 0..6 Age Bucket, instead for the correct bucket.

答えて

1

問題は方法MDXが書き込まれるため、ユーザはない任意のクエリのコンテキストで、キューブに接続またはレポートまたはフィルタ場合IIF関数が評価されることです。等号の左にあるものまたはSCOPEステートメントへのパラメータは、接続時に評価されます。右側のすべてがクエリ時に評価されます。

IIFステートメントを、レポートに含まれるフィルタ(Itemディメンションなどのフィルタリングなど)に依存させたいとします。私はMDXを...に変更します。

CREATE MEMBER CURRENTCUBE.[MEASURES].[TEST] AS NULL, 
VISIBLE = 1, ASSOCIATED_MEASURE_GROUP = 'Item Transaction'; 

SCOPE(MEASURES.[TEST]); 
    [Age Bucket].[Age Bucket].&[4] = IIF([MEASURES].[ItemAgeSales] >= 730 , [MEASURES].[ItemAgeSales], NULL); 
    [Age Bucket].[Age Bucket].&[3] = IIF([MEASURES].[ItemAgeSales] >= 548 and [MEASURES].[ItemAgeSales] < 730, [MEASURES].[ItemAgeSales], NULL); 
    [Age Bucket].[Age Bucket].&[2] = IIF([MEASURES].[ItemAgeSales] >= 365 and [MEASURES].[ItemAgeSales] < 548, [MEASURES].[ItemAgeSales], NULL); 
    [Age Bucket].[Age Bucket].&[1] = IIF([MEASURES].[ItemAgeSales] >= 183 and [MEASURES].[ItemAgeSales] < 365, [MEASURES].[ItemAgeSales], NULL); 
    [Age Bucket].[Age Bucket].&[0] = IIF([MEASURES].[ItemAgeSales] < 183, [MEASURES].[ItemAgeSales], NULL); 
END SCOPE; 
関連する問題