web-dev-qa-db-ja.com

ディメンション属性によるMDX計算メンバーフィルター

計算されるメンバーを作成し、ディメンションでフィルター処理したいのですが。これは実用的な例です:

(
    [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]
)
14
ilija veselica

まず、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]
}

セットを単一のメンバーとして使用する

セットは素晴らしいですが、計算されたメンバーの要件のように、セットを単一のメンバーとして扱うことだけが必要な場合があります。これを行うには、集計関数を使用する必要があります。集計関数はセットを受け取り、セット全体を表すメンバーを返します。

これらにはいくつかあり、使用する適切なものは、キューブに保存されているデータによって異なります:MINMAXCOUNT、および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

47
Tullo_x86

次の構文を試してください:

SUM({[Policy].[Policy Status].&[Void], [Policy].[Policy Status].&[Policy]}, [Measures].[FK Policy Distinct Count])
2
Noe Zavala