15

計算されるメンバーを作成し、ディメンションでフィルター処理したいと考えています。これは実際の例です:

(
    [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]
)
4

2 に答える 2

53

まず、MDX 構文と、それがタプル、メンバー、およびセットの概念とどのように関連しているかを理解することが重要です。

タプル

括弧を使用するとタプルを表します:

(
  [Policy].[Policy Status].&[Void], 
  [Policy].[Tran Type].&[Renewal], 
  [Measures].[FK Policy Distinct Count]
)

タプルには、任意の階層から 1 つのメンバーのみを含めることができます。

セット

同じ階層内の複数のメンバーから結果を取得するには、セットに対してクエリを実行する必要があります。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] )
}

この式を単純化するために、異なる次元の 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キューブに格納されているデータによって異なります。この例では、SUM を使用してディメンションを集計すると仮定します。MAXCOUNTSUM

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

于 2011-12-21T00:03:52.680 に答える
2

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

SUM({[Policy].[Policy Status].&[Void], [Policy].[Policy Status].&[Policy]}, [Measures].[FK Policy Distinct Count])
于 2011-12-21T18:03:28.030 に答える