計算されるメンバーを作成し、ディメンションでフィルター処理したいのですが。これは実用的な例です:
(
[Policy].[Policy Status].&[Void],
[Policy].[Tran Type].&[Renewal],
[Measures].[FK Policy Distinct Count]
)
しかし、このようにフィルタリングしたい場合
(
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy],
[Measures].[FK Policy Distinct Count]
)
それが機能していないより。同じ階層がタプルで複数回表示されていると述べています。
もう1つは、行を除外する方法ですか。ここにアイデアがあります...
(
![Policy].[Policy Status].&[Void],
![Policy].[Policy Status].&[Policy],
[Measures].[FK Policy Distinct Count]
)
まず、MDX構文と、それが タプル、メンバー、セット の概念とどのように関連しているかを理解することが重要です。
括弧の使用はタプルを示します:
(
[Policy].[Policy Status].&[Void],
[Policy].[Tran Type].&[Renewal],
[Measures].[FK Policy Distinct Count]
)
タプルには、任意の階層の単一のメンバーのみを含めることができます。
同じ階層内の複数のメンバーから結果を取得するには、セットを照会する必要があります。 MDXセットは中括弧で示されます。
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
セットは、 定義により 、
ゼロ、1つ以上のタプルの順序付けられたコレクション。
したがって、これらのメンバーの両方に対して[FK Policy Distinct Count]
メジャーをクエリする場合は、セットのタプルにそれぞれメジャーを含める必要があります。
{
( [Policy].[Policy Status].&[Void], [Measures].[FK Policy Distinct Count] ),
( [Policy].[Policy Status].&[Policy], [Measures].[FK Policy Distinct Count] )
}
この式を簡略化するために、 crossjoin 異なる次元の2つのセットを使用できます。
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy],
[Policy].[Policy Status].&[Something],
[Policy].[Policy Status].&[Something else],
[Policy].[Policy Status].&[Yet another member]
}
*
{
[Measures].[FK Policy Distinct Count]
}
セットを定義できるようになったので、セットからいくつかのメンバーを削除します。あなたの例では、レベル(MDXエンジンにとっては、階層のそのレベルのすべてのメンバーを含むキューブ内の事前定義されたセットです)から開始し、特定のメンバーを除外したいようです。 MDXには、セットを操作する多くの関数があり、EXCEPT
を使用します。
EXCEPT
関数 2つのパラメーターをとります 、1つ目は削除するセット、2つ目は最初から削除するセットです。セットを返します。
この例では、[Policy].[Policy Status]
が属性階層であり、その唯一のレベルの一意の名前が[Policy].[Policy Status].[Policy Status]
であると想定します。
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
)
これにより、[Policy].[Policy Status].[Policy Status]
および[Policy].[Policy Status].&[Void]
を除き、[Policy].[Policy Status].&[Policy]
レベルのすべてのメンバーが返されます。
有用な結果を得るために、メジャーによって結果をクロス結合することができます。
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
)
*
{
[Measures].[FK Policy Distinct Count]
}
セットは素晴らしいですが、計算されたメンバーの要件のように、セットを単一のメンバーとして扱うことだけが必要な場合があります。これを行うには、集計関数を使用する必要があります。集計関数はセットを受け取り、セット全体を表すメンバーを返します。
これらにはいくつかあり、使用する適切なものは、キューブに保存されているデータによって異なります:MIN
、MAX
、COUNT
、およびSUM
それらの一部です(より完全なリストについては、 MDX関数リファレンス の「数値関数」を参照してください)。この例では、SUMを使用してディメンションを集計すると仮定します。
SUM(
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
),
[Measures].[FK Policy Distinct Count]
)
ここでは、集計するメジャーを2番目のパラメーターとしてSUMに渡しました。
MDXは複雑な言語であり、多くの共通および非共通の集合演算をサポートしています。まだ読んでいない場合は、オンラインで入手できるドキュメントを読むか、優れたMDXブックを入手することをお勧めします。知っておくべきことがたくさんあります:)
<3
次の構文を試してください:
SUM({[Policy].[Policy Status].&[Void], [Policy].[Policy Status].&[Policy]}, [Measures].[FK Policy Distinct Count])