質問
これが可能かどうか、あるいは MDX に関する私の限られた知識が間違った方向に進んでいるのかどうかはわかりません...
私が扱っているキューブには、日付の 2 つの異なるディメンションがあります。 [Statement Dates]
そして [Premium Dates]
. 。さらにそれぞれの階層は次のようになります。
[Statement Dates].[Statement Year].[2008]
[Payment Dates].[Payment Year].[2008]
実装しているビジネス ロジックでは、次のようなことを行う必要があります。
select
({ [Measures].[Commission] }) on columns,
({[Products].[Product Category]}) on rows
from [Cube]
where
(
IIF( [Products].[Product Category].CurrentMember.Name = "Some Category",
[Statement Dates].[Statement Year].[2008],
[Payment Dates].[Payment Year].[2008] )
)
したがって、使用されている製品カテゴリに基づいて、年のフィルタリングにどのディメンションを使用するかを区別する必要があります。
これは正常に解析され、クエリが実行されますが、数値は次のことを示唆しているようです。 IIF
ステートメントは常に false を返します。
解決
WHERE 句が最初に評価されるため、IIF の .CurrentMember 関数は「すべての製品カテゴリ」のみを参照します。この場合、コンテキスト内の唯一の製品カテゴリは「すべての製品カテゴリ」であるため、[製品].[製品カテゴリ].CurrentMember.Name が「一部のカテゴリ」と等しくなることはありません。
考えられる回避策の 1 つは、次のような計算を行うことです。
WITH MEMBER Measures.Commission2 as
SUM(
{[Products].[Product Category].[Product Category].Members}
, IIF( [Products].[Product Category].CurrentMember.Name = "Some Category"
, ([Statement Dates].[Statement Year].[2008],[Measures].[Commission])
, ([Payment Dates].[Payment Year].[2008].[Measures].[Commission]) )
)
select
({ [Measures].[Commission2] }) on columns
, ({[Products].[Product Category]}) on rows
from [Cube]
キューブ内の計算スクリプトでスコープ指定された割り当てを実行して、この種のことを行うこともできます。
所属していません StackOverflow