1)代表的な計算式の例
ビジネスシステムで、計算されるメンバーで使用することが多い計算式のサンプルを列挙します。
(1)累計
月ごとの売上金額と、期首からの売上金額累計を取得するMDXは次のようになります。
WITH MEMBER [Measures].[RUIKEI] AS Sum([URIAGE DATE].[YYYY-MM-DD].[2009年].FIRSTCHILD:
[URIAGE DATE].[YYYY-MM-DD].CurrentMember,
[Measures].[URIKINGAKU]) SELECT {[URIAGE DATE].[YYYY-MM-DD].[2009年].Children } ON COLUMNS, {[Measures].[URIKINGAKU], [Measures].[RUIKEI] } ON ROWS FROM SALES
実行結果は次のようになります。
上段はその月の売上金額、下段はその年度の累計金額です。この例で使用しているのはSUM関数と「:」という演算子です。「:」は範囲を示す演算子で、範囲内の全メンバーを含むセットを返します。
メンバーA:メンバーB
と記述することで「メンバーAからメンバーBまでの全メンバー」のセットを取得できます。例2では
[URIAGE DATE].[YYYY-MM-DD].[2009年].FirstChild: [URIAGE DATE].[YYYY-MM-DD].CurrentMember
の記述で、「2009年度の最初の月からその月まで」を意味します。SUM関数の構文は次回詳述しますが、
SUM([URIAGE DATE].[YYYY-MM-DD].[2009年].FirstChild:
[URIAGE DATE].[YYYY-MM-DD].CurrentMember,
[Measures].[URIKINGAKU])
と記述することで「2009年度の最初の月からその月までの売上金額合計」となります。
(2)移動平均、移動合計
累計は「期首からその月まで」という範囲指定ですが、移動平均や移動合計の場合は「その月(日)までの直近数ヶ月間(数日間)」が計算対象範囲となります。その場合は次のような計算式になります。
WITH MEMBER [Measures].[HEIKIN] AS Avg(LastPeriods(6,[URIAGE DATE].[YYYY-MM-DD].CurrentMember),
[Measures].[URIKINGAKU]) SELECT {[URIAGE DATE].[YYYY-MM-DD].[2009年].Children } ON COLUMNS, {[Measures].[URIKINGAKU], [Measures].[HEIKIN] } ON ROWS FROM SALES
LASTPERIODS(6,[URIAGE DATE].[YYYY-MM-DD].CURRENTMEMBER)
が「直近6か月」を意味しています(関数の詳細は次回参照)。
AVG(LASTPERIODS(6,[URIAGE DATE].[YYYY-MM-DD].CURRENTMEMBER),[MEASURES].[URIKINGAKU])
で「直近6か月の売上金額の平均」すなわち移動平均となり、AVGをSUMに変更すると「直近6か月の売上金額の合計」すなわち移動合計となります。
(3)増加減少率
ファンチャートなどで使用する増加減少率は次のような計算式で取得します。
WITH MEMBER [Measures].[ZOUKARITSU] AS ([URIAGE DATE].[YYYY-MM-DD].CurrentMember,[Measures].[URIKINGAKU]) /
([URIAGE DATE].[YYYY-MM-DD].[2009年].FirstChild,[Measures].[URIKINGAKU]) SELECT {[URIAGE DATE].[YYYY-MM-DD].[2009年].Children } ON COLUMNS, {[Measures].[URIKINGAKU], [Measures].[ZOUKARITSU] } ON ROWS FROM SALES
([URIAGE DATE].[YYYY-MM-DD].CurrentMember,[ Measures].[URIKINGAKU]) / ([URIAGE DATE].[YYYY-MM-DD].[2009年].FirstChild,[Measures].[URIKINGAKU])
という2つのタプルの割り算が「期首月を基準としたその月の増減率」を意味しています。
([URIAGE DATE].[YYYY-MM-DD].CurrentMember,[Measures].[URIKINGAKU]) / ([URIAGE DATE].[YYYY-MM-DD].CurrentMember.PrevMember,[Measures].[URIKINGAKU])
とすると「前月比」になります。
(4)構成比
パレート図などで使用する構成比は次のような計算式でも取得できます(CurrentMember.Parentを使わない方法)。
WITH MEMBER [Measures].[KOSEIHI] AS [Measures].[URIKINGAKU] /
([SHOHIN].[SHOHINMEI].[ALL],[Measures].[URIKINGAKU]) SELECT {[Measures].[URIKINGAKU], [Measures].[KOSEIHI] } ON COLUMNS, {[SHOHIN].[SHOHINMEI].Children } ON ROWS FROM Sales WHERE [URIAGE DATE].[YYYY-MM-DD].[2008年]
([SHOHIN].[SHOHINMEI].[ALL],[Measures].[URIKINGAKU])というタプルが「全商品の売上合計金額」を意味しており、縦軸が[SHOHIN].[SHOHINMEI].Childrenであるため、[Measures].[URIKINGAKU] / ([SHOHIN].[SHOHINMEI].[ALL],[Measures].[URIKINGAKU])と記述することにより、「商品別の売上構成比」を意味することになります。

