MDXとセクション
「The WITH」セクションでは、問合せの存続期間中に複数回使用できる参照セットまたはメンバーを定義します。
問合せの開始時にキーワード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つの販売書類タイトルのセットに名前を付けることができます:
|
set | set specificationのロジック。これは名前が付けられているため、再利用できます。 一重引用符で囲む必要があります。 前述の例では、Topcount関数がセット全体を定義しています。 |
calculated_member_name | 問合せの実行中に存在する仮想メンバーの名前。 その定義で、計算済メンバーをディメンションに関連付ける必要があります(次の例では、[Max Qtr2 Sales]がMeasuresディメンションに関連付けられているため)。
たとえば、
計算済メンバーは、子、子孫、親、兄弟などのメタデータ関数では機能しません。 たとえば、[CM1]として定義された計算済メンバーがある場合、次の方法では使用できません: |
<numeric_value_expr> | 算術関数を使用して比較される、データベース・アウトラインの実際のメンバーを含む式。 式の結果の値が計算済メンバーに適用されます。 計算済メンバーを使用すると、データベース・アウトラインを変更せずに、多数のシナリオを作成および分析できます。 |
<solve_order_specification> | オプション。 各計算済メンバーの最後に,SOLVE_ORDER = n を追加することで、メンバーの計算順序を指定できます。 たとえば、次の仮想問合せの解決順は太字で示されています:
「解決順の使用例」を参照してください。 |
<perspective_specification> |
データベースで可変属性が使用されている場合、可変属性に関連付けられている基本メンバーは、指定したパースペクティブに従って集計されます。 パースペクティブは、リアル(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]
は、利益を販売のパーセンテージとして計算します。
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問合せで定義された計算済メンバーに適用されます。 アウトラインの前の方にあるディメンションに属する計算済メンバーは、この場合に獲得するメンバーであり、その式を使用してセルが評価されます。
計算済メンバー
計算済メンバーを使用した問合せの例は、次の関数の例を参照してください: