集約ストレージ・アウトラインでの式の記述
式エディタを使用して、Essbase集約ストレージ(ASO)のアウトラインでMDX式を記述します。式により、基本的な数式の適用、複数ディメンションにわたるメンバーの計算、条件付きテストの実行、ユーザー定義属性(UDA)に基づいたフィルタ処理ができます。
集約ストレージ・アウトラインに対する式
式はプレーン・テキストです。式を式エディタに直接入力することも、任意のテキスト・エディタで式を作成して、そのテキストを式エディタに貼り付けることもできます。
関数名の入力誤りや存在しないメンバーなど、式の構文エラーがある場合は、MDXベースの構文チェックによって指摘されます。不明なメンバー名は、関数名のリストで検証できます。サービス・インスタンスまたはアウトラインに関連付けられたアプリケーションに接続していない場合は、不明な名前を検証するために、Essbaseによって接続される場合があります。
構文チェックは、式を検証または保存するときに発生します。エラーはユーザー・インタフェースに表示されます。エラーが発生した場合は、式を保存するかしないかを選択します。エラーのある式を保存すると、アウトラインを保存するときに警告されます。エラーのある式を計算すると、その式は無視され、メンバーには$MISSINGの値が指定されます。
構文チェッカでは、式のセマンティック・エラーは警告できません。セマンティック・エラーは、式が期待どおりに動作しないときに発生します。式のセマンティック・エラーを検出する方法の1つは、その式を定義する数値式をMDXに配置し、それを実行し、結果が想定どおりかどうかを確認することです。
ディメンション構築データソースに式を含めることができます。「ディメンション構築のフィールド・タイプ情報の設定」を参照してください。
集約ストレージ・アウトラインの基本的な等式
式に算術演算を適用して、基本的な等式を作成できます。たとえば、次の式は、ASOsamp Basicキューブ内のAvg Units/Transactionメンバーに適用されます:
[Units]/[Transactions]
Avg Units/Transaction内の式は、ユニットの数をトランザクションの数で除算し、トランザクション当たりの平均ユニット数を求めます。
集約ストレージ・アウトラインでは、メンバーに費用アイテムとしてタグ付けできません。したがって、Calcの@VARや@VARPERなどの関数で費用タグを考慮することで2つのメンバー間の差異を判断する場合、これらは集約ストレージ・アウトラインでは関係がありません。
MDXの減算演算子は、2つのメンバー間の差異を計算するために使用できます。たとえば、ASOsamp BasicのPrice Diffという新しいメンバーに次の式を適用して、支払価格と元値の差異を計算できます:
[Price Paid]-[Original Price]
集約ストレージ・アウトラインのディメンションをまたぐメンバー
ASOsamp Basicには、「% of Total」という、メンバーに対する式が含まれています。このメンバー式では、トランザクションによって生成されるメジャー合計のパーセンテージが特定されます。「% of Total」の式は次のとおりです。
Transactions/
(Transactions,Years,Months,[Transaction Type],[Payment Type],
Promotions,Age,[Income Level],Products,Stores,Geography)
この式では、タプル(Transactions, Years, ...)で除算したメンバー(Transactions)を指定しています。この式では、キューブ内のすべてのトランザクション・データが考慮されるように、それぞれのディメンションの最上位メンバーをリストします。つまり、Curr Yearメンバーのトランザクション・データではなくYearsディメンションのすべてのメンバーのトランザクション・データ、最初の2つの四半期の月のトランザクション・データではなくすべての月のトランザクション・データなどです。このように、「% of Total」の値は、トランザクションによって生成されるメジャーの合計のパーセンテージを表します。
集約ストレージ・アウトラインの式の条件付きテスト
1つまたは一連の条件付きテストを使用する式を定義して、メンバーの値を特定できます。1つのelse条件を持つテストを実行するには、IIF関数を使用します。IIF関数をネストすることで、より複雑な問合せを作成できます。
次の例では、会社がクレジット・カード取引に対して支払う必要がある価格(5%の手数料を含む)を表すメンバーの式を指定しています。次の例では、ASOsamp BasicキューブのMeasuresディメンションにCredit Priceメンバーが追加されていると仮定しています。Credit Priceには次の式が含まれ、支払タイプがクレジット・カードの場合、これによりPrice Paidに5%加算されます。
IIF (
[Payment Type].CurrentMember=[Credit Card],
[Price Paid] * 1.05, [Price Paid]
)
複数のテストおよびelse条件を含む式を作成するには、CASE、WHEN、THEN構造を使用します。
Filter関数によって、指定された検索基準の基準を満たす入力セットのタプルが戻されます。たとえば、すべての製品にベースライン(100)を設定するには、Baselineメンバーを追加して、そのメンバーに対する式を次のように作成します。
Count(Filter(Descendants([PersonalElectronics],
[Products].Levels(0)),[Qtr1] > 100.00))
集約ストレージ・アウトライン内の式のUDA
UDAは、メンバーに対して作成する単語または語句です。たとえば、Sample.Basicの場合、Marketディメンションの最上位レベルのメンバーには、Small MarketというUDAまたはMajor MarketというUDAが含まれます。
このトピックで使用するMajor Marketの例は、すべての主要市場メンバーの総売上高を示すメンバーに対する式の作成方法を示しています。この例では、Sample.Basicに新しいメンバー(Major Market Total)が追加されていると想定します。
-
MDXには、IsUDAというブール関数があります。この関数では、メンバーに関連するUDAタグがある場合、TRUEが戻されます。次の構文では、Marketディメンションの現在のメンバーにMajor MarketというUDAがある場合、TRUEが戻されます。
IsUda([Market].CurrentMember, "Major Market")
-
Filter関数をIsUDAとともに使用する(次の構文で示すように)と、Marketディメンションの各メンバーについて、逐次、Major MarketというUDAを持つ各メンバーの値が戻されます。
Filter([Market].Members, IsUda([Market].CurrentMember, "Major Market"))
-
Sum関数では、Filter関数で戻された値が加算されます。Major Marketの例では、次の数式が作成されています。
Sum (Filter([Market].Members, IsUda([Market].CurrentMember, "Major Market")))
この式が、Major Market Totalメンバーに添付されます。