MDX(MultiDimensional eXpressions)とは
MDX(MultiDimensional eXpressions)は、オンライン分析処理(
OLAP)データベースの多次元データを操作するためのクエリ言語です。
SQLと共通点も持ちますが、
OLAPキューブの構造に特化した問い合わせを行うことができます。また、スプレッドシートの数式に似た構文で計算処理を記述できるのも特徴です。
MDXの背景
MDXは、
OLAPキューブに格納された多次元データに対して、柔軟なクエリとデータ操作を行うための専用言語として開発されました。従来の
SQLでも一部の操作は可能ですが、複雑なMDXクエリを
SQLで表現しようとすると、非常に冗長な記述になりがちです。MDXは多くの
OLAPベンダーで採用されており、事実上、
OLAPシステムの業界標準となっています。
MDXの歴史
MDXは、1997年にMicrosoftによってOLE DB for
OLAP仕様の一部として初めて発表されました。これは、
SQL Serverのエンジニアグループによって開発されました。
1998年には、Microsoft
OLAP Services 7.0が商用リリースされ、その後、Microsoft Analysis Servicesへと発展しました。OLE DB for
OLAP仕様は、Microsoftが所有する仕様でありながら、多くの
OLAPベンダーに採用されることになりました。XML for Analysis(XMLA)仕様では、MDXクエリ言語の詳細についてOLE DB for
OLAP仕様を参照する形になっています。Microsoft Analysis Services 2005では、サブクエリなどのMDX拡張機能が追加され、Microsoft Excel 2007などの製品でこれらの拡張機能が利用されるようになりました。この拡張されたMDXは、MDX 2005と呼ばれることもあります。
mdXML
2001年には、XMLA評議会によってXML for Analysis(XMLA)標準がリリースされ、その中でクエリ言語としてmdXMLが採用されました。XMLA 1.1仕様では、mdXMLは基本的にXMLの`
`タグでラップされたMDXとして定義されています。
MDXには、主に以下の6つのデータ型があります。
スカラー: 数値や文字列などの単一の値です。リテラルとして直接記述できるほか、MDX関数の戻り値としても得られます。例:数値`5`、文字列`"OLAP"`、`Aggregate(数値)`、`UniqueName(文字列)`など。
ディメンション/階層: OLAPキューブのディメンションは、キューブ内のメジャーや属性を構成する要素です。MDXでは、ディメンション間の依存関係は考慮されず、相互に独立していると見なされます。ディメンションは、レベルを持つ階層構造を持つことがあります。階層は、ディメンション内のレベルをまとめたものです。例:`[Time]`、`.Dimension`、`[Time].[Fiscal]`、`.Hierarchy`など。
レベル: ディメンションの階層構造におけるレベルを指します。例:`[Time].[Fiscal].[Month]`、`.Level`など。
メンバー: ディメンション階層における具体的な要素を指します。例:`[Time].[Fiscal].[Month].[August 2006]`、`[Time].[Fiscal].[2006].[Q3].[August 2006]`、`.PrevMember`、`.Parent`、`.FirstChild`など。同じメンバーでも異なる階層に存在する場合は、それぞれ異なるメンバーとして扱われるため、セットやタプルで区別する必要があります。
タプル: 異なるディメンションのメンバーを順序付けた集合です。例:`([Time].[Fiscal].[Month].[August], [Customer].[By Geography].[All Customers].[USA], [Measures].[Sales])`、`.Item`など。
セット: 同じディメンションまたは階層のタプルを順序付けた集合です。例:`{([Measures].[Sales], [Time].[Fiscal].[2006]), ([Measures].[Sales], [Time].[Fiscal].[2007])}`、`Crossjoin`、`Filter`、`Order`、`Descendants`など。
また、メンバープロパティや、配列など他のデータ型も使用できます。メンバープロパティは、クエリのPROPERTIES句で取得できます。状況に応じて、MDXは他のデータ型も許可します。例えば、配列を`SetToArray`関数内で使用して、ActiveXライブラリ内のユーザー定義関数へ渡すことが可能です。その他、Microsoftの`MeasureGroupMeasures`関数や`KPIValue`、`KPIGoal`関数といったデータ型も存在します。
MDXクエリの例
以下は、基本的なMDXクエリの例です。このクエリは、カリフォルニア州の店舗の2002年と2003年の売上を返します。
mdx
SELECT
{[Measures].[Store Sales]} ON COLUMNS,
{[Time].[2002], [Time].[2003]} ON ROWS
FROM
[Sales]
WHERE
([Store].[California])
この例では、以下の要素が使用されています。
SELECT句: クエリの軸を指定します。この例では、列軸に`[Measures].[Store Sales]`を、行軸に`[Time].[2002]`と`[Time].[2003]`を指定しています。
FROM句: データソースとなるキューブを指定します。この例では、`[Sales]`キューブを指定しています。
WHERE句: スライサー軸を指定します。この例では、`[Store].[California]`を指定しています。
MDXクエリでは、最大128個までの軸を指定できます。2つの軸を作成する場合は、1つが列軸、もう1つが行軸である必要があります。ただし、クエリ内での表示順序は関係ありません。軸が1つだけのクエリを作成する場合は、必ず列軸である必要があります。
まとめ
MDXは、多次元データを扱うための強力なクエリ言語であり、OLAPデータベースの複雑な分析を効率的に行うために不可欠です。この記事を参考に、MDXの基本を理解し、より高度なデータ分析に挑戦してください。
参考文献
George Spofford, Sivakumar Harinath, Chris Webb, Dylan Hai Huang, Francesco Civardi: MDX-Solutions: With Microsoft SQL Server Analysis Services 2005 and Hyperion Essbase. Wiley, 2006, ISBN 0-471-74808-0
Mosha Pasumansky, Mark Whitehorn, Rob Zare: Fast Track to MDX. ISBN 1-84628-174-1
Larry Sackett: MDX Reporting and Analytics with SAP NetWeaver BW. SAP Press, 2008, 978-1-59229-249-3
外部リンク
* 多次元式 (MDX) リファレンス, Microsoft Docs