30日間のローリング合計のMDX計算メジャーがあり、将来のメンバーの計算をマスクしたいと思います。 CASEステートメントを使用しようとしていますが、比較が正しく機能しません。会計月のメンバーのキーが日時である場合、これは機能しませんか?
CASE
WHEN [Time].[Fiscal Month].CurrentMember < NOW()
THEN 1
ELSE 0
END
代替の、場合によってはより良いパフォーマンスのアプローチは、「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