6)Filter()
構文:Filter(セット,条件式)(戻り:セット)
Filter関数はクエリー結果に含まれる値の条件を指定し、絞り込みます。
第1パラメータには絞り込み対象のセットを指定し、第2パラメータに絞り込むための条件式を指定します。以下にいくつかの使用例を挙げます。
SELECT { [Measures].[URIKINGAKU] } ON COLUMNS,
{ Filter([TOKUISAKI].[TOKUIMEI].CHILDREN,
([URIAGE DATE].[YYYY-MM-DD].[2008年].[12月],
[Measures].[URIKINGAKU]) >1000000)
} ON ROWS
FROM [Sales]
WHERE [URIAGE DATE].[YYYY-MM-DD].[2008年]
この例では第2パラメータに([URIAGE DATE].[YYYY-MM-DD].[2008年].[12月],[Measures].[URIKINGAKU])というタプルを指定することにより、特定期間(2008年12月)の売上金額を明示、その金額が100万円を超える、という条件を指定しています。そして、スライサに2008年を指定することで、横軸に現れる売上金額を2008年の全体売上に特定しています。
SELECT {[URIAGE DATE].[YYYY-MM-DD].[2007年].[12月],
[URIAGE DATE].[YYYY-MM-DD].[2008年].[12月]
} ON COLUMNS,
{ Filter([SHOHIN].[SHOHINMEI].CHILDREN,
[URIAGE DATE].[YYYY-MM-DD].[2008年].[12月] >
[URIAGE DATE].[YYYY-MM-DD].[2007年].[12月] * 1.1
)
} ON ROWS
FROM [Sales]
WHERE [Measures].[SURYO]
この例ではスライサにSURYOを指定することで、すべての計算や表示対象を金額ではなく、数量としています。その上でFilter関数の条件式に2007年12月より2008年12月の方が10パーセント以上増加している、という条件指定を行っています。
7)Order()
構文:Order(セット,数値または文字式,並べ替えオプション)(戻り:セット)
クエリー結果に含まれるメンバーを並び替えます。
第1パラメータには並べ替え対象のセットを指定し、第2パラメータに並べる根拠となる数値または文字式を、第3パラメータには昇順、降順などのオプションを指定します。
以下に使用例を挙げます。
SELECT { [Measures].[SURYO] } ON COLUMNS,
{ Order([SHOHIN].[SHOHINMEI].CHILDREN,
[Measures].[SURYO],DESC)
} ON ROWS
FROM [Sales]
WHERE [URIAGE DATE].[YYYY-MM-DD].[2008年].[12月]
この例では商品名の一覧である[SHOHIN].[SHOHINMEI].CHILDRENを、売上数量の多い順(降順)に並べています。少ない順(昇順)に並べる場合はDESCの替わりにASCを指定します。
8)Sum()、Avg()、Max()、Min()
構文:Sum(セット,数値式 )
Avg(セット,数値式 )
Min(セット,数値式 )
Max(セット,数値式 )
それぞれ第1パラメータのセット内における、第2パラメータの数値式の集計(Sum)、平均(Avg)、最少値(Min)、最大値(Max)を戻します。これらの関数は主に計算されるメンバーで使用されます。計算されるメンバーではなく、Select軸に直接メジャーを指定する場合、Sum関数を使用しなくても値は表示単位で集計されることがありますので注意してください。
SELECT { [Measures].[SURYO] } ON COLUMNS
FROM [Sales]
WHERE [URIAGE DATE].[YYYY-MM-DD].[2008年].[08月]:
[URIAGE DATE].[YYYY-MM-DD].[2008年].[12月]
この例は集計値を表示しますが、Sum関数を使用しません。
WITH MEMBER [Measures].[累計] AS Sum([URIAGE DATE].[YYYY-MM-DD].[2008年].FIRSTCHILD:
[URIAGE DATE].[YYYY-MM-DD].CurrentMember,
[Measures].[URIKINGAKU]) SELECT { [URIAGE DATE].[YYYY-MM-DD].[2008年].Children } ON COLUMNS, { [Measures].[累計] } ON ROWS FROM [Sales]
この例では月別の売上累計金額の算出のため、「期首から当該月までの集計値」の計算にSum関数を使用しています。
WITH MEMBER [Measures].[平均売上] AS Avg([URIAGE DATE].[YYYY-MM-DD].[2008年].Children,
[Measures].[URIKINGAKU]) MEMBER [Measures].[最大売上] AS Max([URIAGE DATE].[YYYY-MM-DD].[2008年].Children,
[Measures].[URIKINGAKU]) MEMBER [Measures].[最少売上] AS Min([URIAGE DATE].[YYYY-MM-DD].[2008年].Children,
[Measures].[URIKINGAKU]) SELECT { [Measures].[平均売上], [Measures].[最大売上], [Measures].[最少売上] } ON COLUMNS FROM [Sales]
この例ではAvg、Max、Minを使用し、それぞれの集計計算を行っています。
まとめ
今回はよく使うMDX関数について解説しました。次回も引き続き、よく使うMDX関数をいくつか解説します。
参考資料
- 『SQL Server Books Online - Microsoft』
- 『MDX Solutions』George Spofford・Sivakumar Harinath・Christopher Webb・Dylan Hai Huang・Francesco Civardi著、Wiley社、2006年3月
