MDX Withセクション

MDX WITHセクションは、Essbaseに対する問合せのコンテキストで繰り返し使用できる参照セットまたはメンバーを定義するためのものです。これらは計算されたメンバーおよび名前付きセットと呼ばれます。

キーワードWITHを問合せの先頭から開始し、問合せの実行時間中存続する再利用可能なロジックのバッファを定義できます。これにより、記述されたコード行の時間と実行時間を節約できます。

可変属性が有効になっている場合は、WITHセクションを使用して、可変属性ディメンションごとにパースペクティブを定義することもできます。複数の可変属性の場合、パースペクティブ設定は、可変属性ディメンションごとに個別に定義できます。

WITHセクションでは、次の再利用可能な要素を作成できます。

  • 計算されたメンバー

  • 名前付きセット

構文

WITH
      SET set_name AS ' set '
      | MEMBER calculated_member_name AS ' <numeric_value_expr> '
      [, <solve_order_specification> ]
      | <perspective_specification>

表4-9 MDX WITHセクション要素

Item 説明
set_name ASキーワードの後に定義されるセットの名前。任意の名前を使用できます。セットの性質を思い出すのに役立つものにする必要があります。たとえば、セット名はBest5Booksのようになります。これは、12月に最も売れた5つのペーパーバックの題名のセットを示す名前です。
WITH
SET [Best5Books] AS
 'Topcount (
   [Paperbacks].members,
   5,
   ([Measures].[Sales], [Scenario].[Actual],
    [Year].[Dec])
  )'
set セット仕様のロジック。名前を付けることで再利用できます。一重引用符で囲む必要があります。前述の例では、Topcount関数がセット全体を定義しています。
calculated_member_name 問合せの実行中に存在する架空のメンバーの名前。この定義の中で、計算されたメンバーをディメンションに関連付ける必要があります(次の例では、[Max Qtr2 Sales]がMeasuresディメンションに関連付けられているため)。

たとえば、Max Qtr2 Salesという名前の計算されたメンバーの値は、実行時にMax関数を使用して計算されます。

WITH
MEMBER [Measures].[Max Qtr2 Sales] AS
  'Max (
    {[Year].[Qtr2]},
    [Measures].[Sales]
  )'

計算されたメンバーは、Children、Descendants、Parent、Siblingsなどのメタデータ関数では機能しません。たとえば、[CM1]として定義された計算メンバーがある場合、[CM1].childrenの方法では使用できません。

<numeric_value_expr> 算術関数を使用して比較した、データベース・アウトライン内の実際のメンバーを含む式。式から得られた値は、計算されたメンバーに適用されます。計算されたメンバーを使用することにより、データベースのアウトラインを変更することなく、大量のシナリオを作成および分析できます。
<solve_order_specification> オプション。計算された各メンバーの末尾に,SOLVE_ORDER = nを追加することで、メンバーが計算される順序を指定できます。たとえば、次の架空の問合せの解決順序は太字で示されています。
WITH
MEMBER [Product].[mbr1] AS
 'calculation', SOLVE_ORDER = 2

MEMBER [Product].[mbr2] AS
 'calculation', SOLVE_ORDER = 1

SELECT
 {[Year].children}
on columns,
 {
  [Product].[mbr1],
  [Product].[mbr2]
 }
on rows

解決順の使用例を参照してください。

<perspective_specification>
PERSPECTIVE REALITY | tuple FOR dimension

データベースが可変属性を使用する場合、可変属性に関連付けられた基本メンバーは、指定したパースペクティブに従って集約されます。

パースペクティブを現実(REALITYキーワードを使用)または明示(レベル0メンバーで構成される入力タプルを使用)に設定できます。

現実ベースの評価とレポートがデフォルトであり、独立したメンバーは現在のコンテキストによって決定されます。

明示評価とレポートを使用する場合は、コンテキストとして使用する独立したディメンションのレベル0メンバーのタプルを指定します。

現実ベースのパースペクティブの例については、AttributeExの例を参照してください。明示パースペクティブの例については、WithAttrExの例を参照してください。

解決順の使用例

WITH 
MEMBER 
  [Measures].[Profit Percent] 
  AS 'Profit *100 /Sales', SOLVE_ORDER=20  
MEMBER 
  [Year].[FirstFourMonths] 
  AS 'Sum(Jan:Apr)',SOLVE_ORDER=10  
SELECT
  {[Profit], [Sales], [Profit Percent]} 
ON COLUMNS,
  {[Jan], [Feb], [Mar], [Apr], [FirstFourMonths]} 
ON ROWS
FROM Sample.Basic

Measuresディメンションで定義された計算メンバー[Profit Percent]は、SalesのパーセンテージとしてProfitを計算します。

Yearディメンションで定義された計算メンバー[FirstFourMonths]は、最初の4か月のデータの合計を計算します。

([Profit Percent], [FirstFourMonths])のデータが評価されるときに、SOLVE_ORDERは評価の順序を指定します。これにより、[Profit Percent]が最初に評価されることが保証され、パーセンテージの正しい値が得られます。評価の順序を変更すると、パーセンテージ値が正しくないことがわかります。この例では、SOLVE_ORDERは、パーセンテージの前に合計を計算する必要があることを指定しています。

解決順が同点である場合の例

複数の計算されたメンバーによって識別されるセルを評価する場合、SOLVE_ORDER値は、式が評価される順序を決定するために使用されます。セルの評価に使用される式は、SOLVE_ORDER値が最も高い計算されたメンバーの式です。この場合、[Profit Percent]の式が、([Profit Percent], [FirstFourMonths])の評価に使用されます。前述の例は次のように計算されます。

([Profit Percent], [FirstFourMonths])
    = ([Profit], [FirstFourMonths]) * 100 / ([Sales], [FirstFourMonths])
    = (([Profit], [Jan]) + ([Profit], [Feb]) + ([Profit], [Mar]) + ([Profit], [Apr])) * 100 / 
          (([Sales], [Jan]) + ([Sales], [Feb]) + ([Sales], [Mar]) + ([Sales], [Apr]))

計算されたメンバーが同じSOLVE_ORDER値を持つ可能性があるため、同点の状況が発生する可能性があります。計算されたメンバーが接続されているディメンションの位置に基づいて、同点でなくなります。

  • 集約ストレージ・アウトラインでは、アウトラインで後になるディメンションに属する計算されたメンバーが、この場合に優先されます。

  • ブロック・ストレージ・データベース・アウトライン(およびリリース7.1.2より前の集約ストレージ・アウトライン)では、解決順プロパティは、MDX問合せで定義された計算メンバーに適用されます。この場合、アウトラインで前になるディメンションに属する計算されたメンバーが優先され、その式を使用してセルが評価されます。

計算されたメンバー

計算されたメンバーを使用した問合せの例については、次の関数の例を参照してください。

Abs

Avg

BottomPercent

Case

ClosingPeriod

Count

Exp

FirstSibling

IIF

Int

Lag

LastPeriods

Lead

Ln

Max

Min

Mod

NextMember

NonEmptyCount

Ordinal

PrevMember

Remainder

Sum

Todate

名前付きセット

名前付きセットを使用した問合せの例については、次の関数の例を参照してください。

BottomPercent

CurrentTuple

Filter (例3)

Generate

Parent (例2)

パースペクティブ

パースペクティブを使用した可変属性問合せの例については、次の関数の例を参照してください。

AttributeEx

WithAttrEx