2)ディメンションのメンバー、階層、レベル
前述のとおり、キューブとは「多次元に構造化されたデータそのもののかたまり」です。MDX言語では、キューブからデータを取得する際に「目的のセルまたはセルのかたまり(セルブロック)の、ディメンション内での位置」を指定する必要があります。
では最も簡単な例でディメンション内の位置を指定してみましょう。
例1:MDXによるディメンション内の位置の指定
[SHOHIN].[SHOHINMEI].[液晶テレビ]
[SHOHIN].[SHOHINBUNRUIMEI].[家電製品]
キューブでは、ディメンション内のデータ分類(この例の[SHOHINMEI]
)のことをディメンションの「属性」と呼び、個別のデータ値(この例の「液晶テレビ」や「家電製品」)のことをディメンションの「メンバー」と呼びます。や
[SHOHINBUNRUIMEI]
つまり、最も簡単なディメンション内の位置の指定は次のように定義できます。
[ディメンション名].[属性名].[メンバー]
ディメンション内の位置指定の記述は、その各要素を[]
で括り、ピリオド(.
)でつなげます。ここで注意して頂きたいのですが、同じ[]
で括っているにもかかわらず、その意味するものが各要素ごとに異なっている、という点です。記述位置により、ディメンションだったり、属性だったり、メンバーだったりしています。
上記の例は最も簡単な指定なのでそれほど混乱しませんが、ディメンションには「階層」という概念があり、この、「階層を含むディメンションの位置指定」を行う場合はちょっと注意が必要です。
例2:ディメンション内の階層を含む位置の指定
[URIAGE DATE].[YYYY-MM-DD].[2009年].[02月]
[URIAGE DATE].[YYYY-MM-DD].[2009年].[02月].LASTCHILD
[TOKUISAKI].[TODOFUKEN-TOKUISAKI].[東京都].CHILDREN
[TOKUISAKI].[TODOFUKEN-TOKUISAKI].[TODOFUKEN].MEMBERS
この例では、「LASTCHILD
」や「CHILDREN
」などの関数(MDXでは、「関数(引数)」と記述する関数と、「.関数」と記述する関数があります)が出てきました。これが何を意味するかの解説は後ほど詳述します。ひとまずここではディメンション指定の各要素の違いについて考えましょう。
階層を含むディメンション内の位置指定は次のようになります。
[ディメンション名].[階層名].[メンバー](.[メンバー] …)(.関数等)
[ディメンション名].[階層名].[レベル名].関数
前述例の[URIAGE DATE]
や[TOKUISAKI]
はディメンションを示しています。次の[YYYY-MM-DD]
や[TODOFUKEN-TOKUISAKI]
は何を示しているのでしょうか?
前ページの例ではこの位置にはディメンションの属性を示していましたが、この例の場合は「階層の名前」を示しています。さらに最後の例では[TODOFUKEN]
は「階層のレベル名」を示しています。
このように、同じ括弧で括られ、ピリオドでつなげられた一見同じような記述であっても、それぞれの要素が何を示しているかはディメンションの構造によってまったく異なっていることに注意してください。
なお、SQL Server Analysis Servicesでは、これらディメンション内の位置指定(多くの場合はメンバーの指定)の際、記述のかなりの部分を省略できます。メンバー指定の場合、そのメンバーが特定できる限り最小限の記述でも正常に解釈されます。
例えばサンプルキューブでは、[TOKUISAKI].[TODOFUKEN].[東京都]
を省略した次のような記述も可能です。
[TOKUISAKI].[東京都]
[東京都]
このように、MDXではかなり過度な省略が可能です。しかし、最初に覚える段階でこのような省略形は理解の妨げになり得ます。このため、本書では極力省略しない記述での解説を行います。