SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

第6回

  • X ポスト
  • このエントリーをはてなブックマークに追加

4)Descendants()

 構文:Descendants(メンバー,レベルまたは相対レベル数値,オプション)(戻り:メンバー)

 第1パラメータで指定されたメンバーから下位階層レベルを第2パラメータで指定し、そのレベルから第3パラメータで指定したオプションによる上下のレベルのメンバーのセットを戻します。

Descendants()使用時の構造
Descendants()使用時の構造
  1. Descendants([URIAGE DATE].[YYYY-MM-DD].[YEAR].[2008年],
    [URIAGE DATE].[YYYY-MM-DD].[MONTH],SELF)

    または
    Descendants([URIAGE DATE].[YYYY-MM-DD].[YEAR].[2008年],1,SELF)
  2. Descendants([URIAGE DATE].[YYYY-MM-DD].[YEAR].[2008年],
    [URIAGE DATE].[YYYY-MM-DD].[MONTH],AFTER)

    または
    Descendants([URIAGE DATE].[YYYY-MM-DD].[YEAR].[2008年],2,AFTER)
  3. Descendants([URIAGE DATE].[YYYY-MM-DD].[YEAR].[2008年],
    [URIAGE DATE].[YYYY-MM-DD].[MONTH],BEFORE)

    または
    Descendants([URIAGE DATE].[YYYY-MM-DD].[YEAR].[2008年],0,BEFORE)

 第1パラメータで指定したメンバーから下位階層の全メンバーを対象とし、第2パラメータで指定したレベル(数値指定の場合は第1パラメータのメンバーからの相対レベル)を基準に、次のように第3パラメータを指定します。

  • SELF:指定したレベルの全メンバー
  • AFTER:指定したレベルより下位の全階層の全メンバー
  • BEFORE:指定したレベルより上位の全階層の全メンバー
  • BEFORE_AND_AFTER:指定したレベルの上位と下位の全階層の全メンバー
  • SELF_AND_AFTER:指定したレベルと、それより下位の全階層の全メンバー
  • SELF_AND_BEFORE:指定したレベルと、それより上位の全階層の全メンバー
  • SELF_BEFORE_AFTER:指定したレベルと、上下位の全階層の全メンバー
  • LEAVES:指定したレベルの全メンバーと、それより上位階層だが、下位階層レベルのメンバーを持たないメンバー(リーフ子孫メンバー)

5)Ancestor()

 構文:Ancestor(メンバー,レベルまたは相対レベル数値)(戻り:メンバー)

 第1パラメータで指定されたメンバーから第2パラメータで指定した上位階層レベルのメンバーを戻します。

Ancestor()使用時の構造
Ancestor()使用時の構造
  1. Ancestor([URIAGE DATE].[YYYY-MM-DD].[2008年].[11月],
    [URIAGE DATE].[YYYY-MM-DD].[YEAR])
  2. Ancestor([URIAGE DATE].[YYYY-MM-DD].[2008年].[11月].[11月1日],
    [URIAGE DATE].[YYYY-MM-DD].[YEAR])

6)StrToMember()、StrToValue()、StrToSet()、StrToTouple()

 構文:StrToMember(文字列)(戻り:メンバー)

    StrToValue(文字列)(戻り:値)

    StrToSet(文字列)(戻り:セット)

    StrToTouple(文字列)(戻り:タプル)

 パラメータで指定された文字列を、MDX文のそれぞれの要素に変換します。MDXではデータの抽出条件となる指定がSELECT句やWHERE句のメンバー指定などで直接記述されてしまうため、MDX文をプロシージャ化して抽出条件をプロシージャのパラメータとして指定する、ということができません。そのために用意されているのがこれらの関数です。

 関数にパラメータに文字列(で括る)を指定し、その結果をメンバーなどMDXの各要素に変換します。ADOMD.Netを使用したクライアントアプリケーションの開発や、当社製品「CubeWalker」を使用したアプリケーション構築などでよく使用します。

使用例:パラメータを受け取るMDXプロシージャの例(年を変数「@NEN」として受け取った場合のMDX)
SELECT	{ [Measures].[URIKINGAKU] } ON COLUMNS,
	{ StrToMember(‘[URIAGE DATE].[YYYY-MM-DD].[‘ 
+ @NEN +’]’)
.Children } ON ROWS FROM [Sales]

 このように、文字列は「+」で結合するなどの編集が可能です。

 また、文字列編集時にはVBA関数も使用できます。これらの組み合わせで文字列編集することにより、MDX文をあらかじめ静的に作成し、パラメータ指定にて動作されることが可能になります。

まとめ

 今回は前回に引き続き、よく使うMDX関数について解説しました。次回はMDXを使用したクライアントアプリケーションの作り方について解説します。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
難解クエリー言語「MDX」に挑戦連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4339 2009/10/14 15:49

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング