一、什麼是MDX(MultiDimensionaleXpressions)
MDX是一種語言,支持多維對象與數據的定義和操作。它可以表達線上分析出來數據卡上的選擇、計算和一些元數據定義等操作,並賦予用戶表現查詢結果的能力。
MDX是由Microsoft,Hyperion等公司研究多維查詢表達式,是所有OLAP高級分析所採用的核心查詢語言。
如同 SQL查詢一樣,每個 MDX 查詢都要求有數據請求(SELECT子句)、起始點(FROM子句)和篩選(WHERE子句)。這些關鍵字以及其它關鍵字提供了各種工具,用來從多維數據集析取數據的特定部分。MDX還提供了可靠的函式集,用來對所檢索的數據進行操作,同時還具有用戶定義函式擴展 MDX的能力。
二、 MDX的使用方式
1、MDX查詢語句
查詢所需要的數據。
2、MDX表達式
定製需要的指標。
3、MDX腳本
指定流程由SQL執行生成自定義的效果。
三、MDX中的相關概念
1、多維數據集
2、度量值(量度)
3、維度
4、維度的層次結構
5、維度的級別
6、成員(Member)
指的是維度樹上的一個節點,這裡有一點需要指出,量度也是一個特殊的維度,所以對於普通維度上的 Member可以有幾下幾種表示方法: [Customer] 或 [Time].[1996] 等,對於特殊的維度——量度而言,也可以表示一個 Member,如: [Measures].[unitsales] 等。
標識符:[ ]
7、元組(Tuple)
是由若干個 Members組成,CUBE上的一個子集(不斷開的子CUBE),每一個維度上最多只能有一個 Member,對於一個 Tuple而言至少有一個維度,多則不限,順序無關,同時對於沒有列出來的那就表示為默認的 Member。
標識符:()
示例:
a) ([Regin ].[USA])
b) ([product].[computers],[time].[2008]) 。
8、集(Set)
同一維度上若干個 Members的集合,或者是若干個 tuples的集合,但這裡有一個地方需要注意,那就是如果是若干個 Tuple組成的集合是,各個 Tuple里的 Member之間存在著一定的對應關係。集合的表示方法用大括弧“ {} ”,所以可能的表示方法為:
a) {[time].[2008],[time].[2009],[time].[2000]} ,這裡 Set是由 同一維度的若干個 Member組成。
b) {([computer],[usa ]),([mobile],[china])} ,這個 Set是由兩個 Tuples組成,這裡大家可以看到,在第一個 Tuple當中,第一個 Member是名為 computer的產品,所以後面的 Tuple的第一個 Member也必須是一個產品,所以我們這裡看到的是 mobile,第一個 Tuple里第二個 Member是一個國家,所以第二個 Tuple的第二個 Member也必須是一個國家名,依次類推。
標識符:{ }
四、 基本語法
一個標準的 MDX查詢語句就是由我們前面介紹的 MDX的三個基本對象構成,也就是 Member、 Tuple、 Set。
1、SELECT SET ON COLUMNS,
SET ON ROWS
FROM CUBE
WHERE TUPLE
2、SELECT SET ON 0,
SET ON 1
FROM CUBE
WHERE TUPLE
五、簡單MDX查詢示例
想像一個簡單的帶有時間、銷售地點和度量3個維度的多維數據集,該多維數據集的名稱為銷售額(即SALES)。其中度量包括銷售額和成本。假如想查看2005年前兩個季度麻薩諸塞州的銷售額與成本,如圖所示。
我們可以通過下面的MDX獲得想要的數據:
SELECT {[MEASURES].[DOLLAR SALES],[MEASURES].[UNIT SALES]} ON COLUMNS,
{[TIME].[2005].[Q1], [TIME].[2005].[Q2]} ON ROWS
FROM [SALES]
WHERE ([CUSTOMER].[MA])
MDX查詢的結果本身是一個格線,本質上石另一個多維數據集。下面將這個簡單的查詢拆開來仔細研究。
關鍵字SELECT後帶需要檢索內容的子句。
關鍵字ON和軸的名稱一起使用,以指定資料庫的維度顯示位置。該示例查詢將度量顯示為列,將時間段顯示為行。
MDX用大括弧{ }引用來自某個特點維度或者多個維度的一組元素。這個簡單的查詢在其兩個軸中的每一個上都只有一個維度(度量維度和時間維度)。元素間用逗號隔開。元素名稱用方括弧引用,並且不同組成部分之間用點號分隔。
MDX能夠的FROM子句指明用於查詢數據的多維數據集。這與SQL中的FROM子句類似。
WHERE子句指定在列或行(或者其他軸上)不出現的多維數據集其他維度的成員。如果不對某個維度指定一個成員,MDX將使用默認成員。WHERE子句是可選的。
提示:MDX不是大小寫敏感的,可以隨心所欲的混用字母大小寫。
六、MDX中的簡單函式和操作符
1、逗號(,)與冒號(:)
可以通過枚舉元素並用逗號來隔開構造一個集,例如上面示例中用到的例子。
{[TIME].[2005].[Q1], [TIME].[2005].[Q2]}
該表達式產生一個包含2005年第一季度和第二季度的集。
冒號用同一級別的兩個成員作為端點,來表示這兩個端點間的所有成員(與EXCEL中的指定單元格範圍的用法類似)。在冒號兩邊可以是相同的成員,表示集中只有一個成員。例如:
{[TIME].[2005].[SEP]: [TIME].[2006].[MAR]}
該表達式表示從2005年9月到2006年3月的所有月份。
2、.MEMBERS 獲取所有成員
無論用於檢索,還是作為更複雜的操作的基礎,獲得一個維度、層次結構或者級別的成員的集是非常普遍的操作。維度、層次結構或者級別放置在.MENBERS操作符的左邊,可以返回由該元數據範圍內所有成員構成的集。
例如:
[TIME].[MONTHS].MEMBERS
該表達式返回時間維度下的月這一級別的所有成員(即所有月份)。
4、.PREMEMBER 獲取指定成員的前一個成員
5、.NEXTMEMBER 獲取指定成員的後一個成員
6、使用.CHILDREN獲得一個成員的子成員
另外一個常用的查詢時獲得一個成員的子成員。這么做的目的可能是執行一個向下鑽的操作,或者為了方便的獲得基於一個共同父成員的範圍內的成員。例如:
[TIME].[YEARS].[2005].CHILDREN
該表達式返回2005年的所有孩子(即2005年的所有月份)。
7、.FIRSTCHILD 獲取指定成員的第一個子成員
8、.LASTCHILD 獲取指定成員的最後一個子成員
七、更多基本辭彙
1、DESCENDANTS() 獲取一個成員的後代成員。
直接子代之下的後代成員,可以使用DESCENDANTS()。
語法:
DESCENDANTS(MEMBER,LEVEL,FALG)
返回MEMBER之下與LEVEL相關的成員,並且可選參數FLAG。
FLAG的可選值有:
SELF
BEFORE
AFTER
SELF_AND_BEFORE
SELF_AND_ AFTER
SELF_ BEFORE _BEFORE
LEAVES
SELF僅僅指MEMBER以下LEVEL級別上的成員,這是最常用的選項,如果忽略FLAG參數,那么默認使用SELF。例如:
DESCENDANTS([TIME].[YEARS].[2005],[TIME].[MONTH])
該將返回2005年的所有月份。
SELF_AND_BEFORE將返回MEMBER所在級別已經LEVEL級別之間的所有成員,也就是包含MEMBER在內、從LEVEL級別到MEMBER級別的所有成員。例如:
DESCENDANTS([TIME].[YEARS].[2005],[TIME].[MONTHS],
SELF_AND_BEFORE)
該表達式將返回2005年及該年的所有季度和所有月份。
2、FILTER() 過濾
FILTER()函式用來縮減集(過濾),它表示在結果集中只包含那些符合特定標準的元素。FILTER()採用一個集和一個布爾表達式作為它的參數,並且當布爾表達式為真時,返回該集的子集。
語法:
FILTER(SET,BOOLEAN-EXPRESSION)
例如:
FILTER({[PRODUCT].[PRODUCTCATEGORY].MEMBERS},
[MEASURES].[DOLLARSALES]>=500)
該表達式將返回相關美元銷售額在500元以上的某類產品構成的集。
FILTER()可以操作元組構成的任何集,而不僅僅是以個維度的成員構成的集。
3、ORDER() 排序
ORDER()用來根據相關數據值給集的元組排序。
語法:
ORDER(SET,EXPRESSION,FLAG)
ORDER()的參數包括一個集、排序標準,還有一個可選的標誌,該標誌指示排序原則(升序或降序,包含或者忽略元組間的層次關係)。ORDER()返回的集由原來的集的元組構成,但按照新指定的順序重新排序。
例如:
ORDER([PRODUCT].[PRODUCTCATEGORY].MEMBERS},
[MEASURES].[DOLLARSALES],BDESC)
該表達式將按銷售額對產品進行降序排序(BDESC將忽略層次結構)。
4、.CURRENTMEMBER 獲取當前成員
語法:
DIMENSION.CUTTENTMEMBER
返回該維度的當前成員。
5、.PARENT 獲取指定成員的父對象成員
語法:
MEMBER.PARENT
返回對給定成員的父對象成員。
6、NONEMPTY去除空切片
在一個多維空間中,數據稀疏現象很常見。MDX中提供了從查詢的結果中移除完全為空的切片的方法,那就是使用NONEMPTY關鍵字。去除空切片需要做的僅僅是在待移除空切片的軸前面加上NONEMPTY關鍵字。NONEMPTY可以用在任何軸、維度和元組上。
7、去年同期的引用和計算
一個經常會用到的計算是查詢一年前同一時期的數據,或者上一個季度同一時期和上周同一天的數據。可以使用PARALLELPERIOD()函式。
語法:
PARALLELPERIOD(LEVEL,INDEX,MEMBER)
該函式首先的到級別LEVEL中成員MEMBER的主席,然後從該祖先的兄弟成員中找到編號比該祖先小INDEX的成員(稱為姻親),最後返回該姻親的後代成員中MEMBER的堂兄弟。
例如:
PARALLELPERIOD([YEARS],1,[MAY2006])
將返回[MAY2005]
相關詞條
-
MDX解決方案
《MDX解決方案》是2008年清華大學出版社出版的圖書,作者是(美)斯波福特。
內容簡介 作者簡介 編輯推薦 目錄 -
SQLServer2005AnalysisServices標準指南
及其定義語言 ·介紹MDX語言的主要概念和深入介紹高級MDX概念...、MDX語言的主要概念和高級MDX概念、集成多維與關係型資料庫的機制、如何...MDX分析數據 第10章 MDX概念 10.1 SEL ECT...
編輯推薦 內容簡介 作者簡介 目錄 -
SQL Server 2005 Analysis Services標準指南(中文版)
MDX概念10.1 SEL ECT語句10.1.1 SEL ECT子句...定義語言·介紹MDX語言的主要概念和深入介紹高級MDX概念·介紹集成多維...模型及其定義語言、MDX語言的主要概念和高級MDX概念、集成多維與關係型...
編輯推薦 內容簡介 作者簡介 圖書目錄 -
SQLServer2005AnalysisServices標準指南(中)
語言、MDX語言的主要概念和高級MDX概念、集成多維與關係型資料庫的機制...MDX快速訪問數據。AnalysisServices提供了根據數據倉庫...及其定義語言·介紹MDX語言的主要概念和深入介紹高級MDX概念·介紹集成...
內容提要 編輯推薦 作者簡介 目錄 -
商務智慧型實戰
27312.1 MDX SELECT語句27312.1.1 基本MDX... 翻譯24210.3 更複雜的腳本242第11章 編寫新腳本—MDX腳本...24311.1.2 由此及彼25711.2 套用MDX腳本26211.2.1 多維數據集...
內容簡介 作者簡介 圖書目錄 -
Visual Basic 6資料庫開發人員指南
6.1.1SQL語句的成份6.1.2 SQL與電腦程式語言的差異6.1.3ANSISQL的類型6.2書寫ANSISQL語句6.2.1SQL語句的分類6.2.2SQL語法格式6.2.3一個簡單的SQLSELECT語句的實用...
內容介紹 作品目錄 -
SQLServer深入詳解
的SELECT語句、存儲過程及觸發器、事務處理等相關內容。另外,通過對這本書的學習...的SQL語句,一旦真正地碰到一個難度大一點的語句或者涉及SQL...的問題不可能用簡單的SQL語句就能實現的,更多的會是在一些基本的套用上發生...
圖書信息 內 容 簡 介 前 言 感言 目 錄 -
hana[分析軟體簡稱]
解析並處理對大量數據的各類CRUDQ操作,支持SQL和MDX語句、SAP...
套用軟體 做些什麼 選擇理由