CodeZine(コードジン)

特集ページ一覧

多次元データベースクエリー言語「MDX」入門
~よく使う関数・前編(5)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/10/07 14:00

目次

6)Filter()

構文:Filter(セット,条件式)(戻り:セット)

 Filter関数はクエリー結果に含まれる値の条件を指定し、絞り込みます。

 第1パラメータには絞り込み対象のセットを指定し、第2パラメータに絞り込むための条件式を指定します。以下にいくつかの使用例を挙げます。

2008年12月の売上が100万円以上の得意先の2008年の全体売上金額
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年の全体売上に特定しています。

前年より売上数量が10パーセント増加している商品の、2007年12月と2008年12月の売上金額
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パラメータには昇順、降順などのオプションを指定します。

 以下に使用例を挙げます。

2008年12月の商品別売上数量を多い順に表示
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関数を使用しなくても値は表示単位で集計されることがありますので注意してください。

2008年8月から12月の商品別売上数量合計を取得
SELECT	{ [Measures].[SURYO] } ON COLUMNS
FROM	[Sales]
WHERE   [URIAGE DATE].[YYYY-MM-DD].[2008年].[08月]:
        [URIAGE DATE].[YYYY-MM-DD].[2008年].[12月]

 この例は集計値を表示しますが、Sum関数を使用しません。

2008年の月別売上累計を取得
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関数を使用しています。

2008年の月間平均売上金額と最大、最少の売上金額を取得
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]

 この例ではAvgMaxMinを使用し、それぞれの集計計算を行っています。

まとめ

 今回はよく使うMDX関数について解説しました。次回も引き続き、よく使うMDX関数をいくつか解説します。

参考資料



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:難解クエリー言語「MDX」に挑戦

著者プロフィール

  • 大家 正巳(オオヤ マサミ)

    株式会社ヴィバーク代表取締役。 システムアナリスト。 この度、当社では SQL Server Analysis Services に接続し、MDXの発行が可能な BIシステム構築ツール「CubeWalker」を開発しました。2009年10月より発売致します。 高速かつ安価なBIシステム作りに、是非お...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5