web-dev-qa-db-ja.com

MDX日時比較

30日間のローリング合計のMDX計算メジャーがあり、将来のメンバーの計算をマスクしたいと思います。 CASEステートメントを使用しようとしていますが、比較が正しく機能しません。会計月のメンバーのキーが日時である場合、これは機能しませんか?

CASE  
WHEN [Time].[Fiscal Month].CurrentMember < NOW()  
THEN 1  
ELSE 0  
END  
2
Jeff Sacksteder

代替の、場合によってはより良いパフォーマンスのアプローチは、「IsFuture」の行に沿って日付ディメンションに属性を追加することです。

データのロード/処理スケジュールに応じて、データウェアハウスにフィールドがあるか、日付が将来の日付であるかどうかにかかわらず、dsvの計算列が事前計算されている可能性があります。

MDXでIIFを使用してオンザフライ計算を実行する代わりに、このように SCOPE を使用して計算されたメジャーを作成できます(テストされていない、メモリから)

Scope   
 (   
    [Date].[IsFuture].&[0]
 ) ;     

   This = 1;  
end scope;

私が提供しているアイデアの1つです。あなたの質問では、サンプルコードの実用的な部分を作成するための詳細はあまり提供されていませんが、これは別のアプローチになる可能性があります。
これは、日付が0ではなく将来の場合は空を返しますが、クライアントがNONEMPTY/NONEMPTYCROSSJOINの結果のみを返す場合に、より良い結果を提供できる要件によって異なります。

関数NOW()はDateTimeを返します。これをメンバーと比較することはできません。時間ディメンションの定義に応じて、MDX関数StrToMemberを使用してNOW()の結果をメンバーに変換できますが、メンバーよりも小さいものはありません。

時間ディメンションに「yyyyMMdd」形式のキーを使用しています。したがって、そのキーは次のように比較できます。

WHEN [Time].[Time].CurrentMember.Properties("Key") < Format(Now(),"yyyyMMdd") THEN 1

1
Stefan Wilms