2016-10-27 7 views
1

以下のロジックを使用してエージングバケットを設定することをお勧めします。クエリではバケットがすべて空白になります。もともと私はを持っていたロジックを使っていましたが、lagは実際の日ではなくメンバーレベルを数えていました。私はここで何が欠けていますか?MDXを使用したエージングバケット

WITH 


member [0-30] as (IIF (Datediff("d", [TXN].[Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) >=0 AND Datediff("d", [TXN].[Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) <= 30 
, [measures].[charge_amount] , 0) 
) 

member [31-60] as (IIF(Datediff('d', [TXN].[Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) >=31 AND Datediff('d', [TXN].[Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) <= 60 
,[measures].[charge_amount], 0) 
) 

member [61-90] as (IIF(Datediff("d", [TXN].[Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) >=61 AND Datediff("d", [TXN].[Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) <= 90 
,[measures].[charge_amount], 0) 
) 

member [91-120] as (IIF(Datediff("d", [TXN].[Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) >=91 AND Datediff("d", [TXN].[Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) <= 120 
,[measures].[charge_amount], 0) 
) 

member [120+] as (IIF(Datediff("d", [TXN].Age Date], STRTOMEMBER(@ToDOSDate,CONSTRAINED)) >= 120 
,[measures].[ charge_amount], 0) 
) 
+0

これは修正されませんが、最後のステートメントは> 120でなければなりません。91-120ステートメントにはすでに120が含まれています。また、@ ToDOSDateのデータ型は? –

+0

@WEI_DBAに感謝しますか? :) – mrbungle

+0

それはdatetimeです – mrbungle

答えて

0

私はと仮定します:

  1. あなたのSELECT句で、行の[TXN].[Age Date]を持っています。
  2. これは@ToDOSDateであり、STRTOMEMBER(@ToDOSDate,CONSTRAINED)に入力したときに動作していることを完全にテストしました。

Datediffは、VBAの関数であり、それは引数だとして入力されたデータ日付が必要です - あなたはタイプメンバーのあるデータに供給しています。

また、階層のメンバーのName属性が[TXN].[Age Date]のように解釈され、日付として解釈されるという前提があります。

WITH 
    MEMBER [Measures].[0-30] AS 
     IIF (
     Datediff(
      "d" 
     ,[TXN].[Age Date].CURRENTMEMBER.NAME 
     ,STRTOMEMBER(@ToDOSDate,CONSTRAINED).NAME 
     ) >=0 
     AND 
     Datediff(
      "d" 
     ,[TXN].[Age Date].CURRENTMEMBER.NAME 
     ,STRTOMEMBER(@ToDOSDate,CONSTRAINED).NAME 
     ) <= 30 
    , [measures].[charge_amount] 
    , NULL) 
関連する問題