mdx為multidimensional expressions的縮寫,多維表示式,是標準的olap查詢語言。在多數olapserver都提供mdx支援,如microsoft sql server olap services,sas,hyperion essbase等。支援多維物件於資料定義和操作。mdx很多方面與結構化查詢語言(sql)語法相似,但他不是sql語言的擴充套件;事實上,mdx所提供的一些功能也可由sql提供,儘管不是那麼有效或直觀。
如同sql查詢一樣,每個mdx查詢都要求有資料請求(select子句)、起始點(from子句)和篩選(where子句)。這些關鍵字以及其它關鍵字提供了各種工具,用來從多維資料集析取資料的特定部分。mdx還提供了可靠的函式集,用來檢索的資料進行操作,同時還具有使用者定義函式擴充套件mdx的能力。
mdx為多維資料庫提供了表示式語查詢語法,用於cube資料,並提供了許多強大的分析函式,用於支援常用的olap分析。語法
維度、級別、成員等,一般用唯一名稱uniquename來標示,可以用包圍name,如果name有空格或者數字開頭,必須使用,否則可以忽略。uniquename是根據層次結構表示的一種方法。即遞迴顯示出祖先的名稱。
維度(dimension):維度直接用包圍。比如product的唯一名稱為[product]或product。
級別(level):級別的uniquename為[維度名稱].[級別名稱],如[year].[2001],同樣,如果沒有空格,可以省略,如year.[2001]。
成員(member):成員的uniquename格式為[維度].(parent member uniquename).[member name],如:時間維上的2023年2月份的uniquename為[2003].[1].[2],中間的1為1季度,因為該維度的結構為年、季、月。
度量(measure):度量實際上市屬於維度維的成員,也就是說度量(measure)是任何cube的乙個維度。如:度量unit sales的unqiuename為[measures].[unit sales]
uniquename是olap元素內部的表示法,在mdx查詢語言中,可以使用uniquename來表示元素。
mdx還提供模糊和其他等價的元素的表示方式:
<1>省略維度名表示級別,如果乙個維度的級別名在整個cube中是唯一的,那麼可以省略維度名來查詢級別。如product.[product family]可以寫成[product family]
<2>省略維度名稱表示成員。如果省略維度名,可以標示該維度最高端別的成員,如[time].[2000]可以寫成[2000],[measures].[unit sales]可以寫成[unit sales]。
<3>成員掛在級別下,即成員不一定要寫成[維度].(parent member uniquename).[member name],可以寫成[維度].[級別].[member name],如2023年3月可以寫成[time].[months].[3]
模糊查詢表示法,都基於不會重複的假設,如果有重複的元素,取第乙個查詢的元素作為查詢結果,可能發生錯誤,因此,建議使用完備的表示法
元組、集合
元組用於定義來自多維資料切片;他是由乙個或多個維度的單個成員的有序集合組成。元組內不包含來自同乙個維度的多個成員(可以理解為座標),元組用()包圍。
如:(時間.[下半年])
(時間.[下半年],[產品].[手機].[nokia])
如果乙個元組是由單個維度的成員組成,那麼可以不用()包圍,即(時間.[下半年])可表示為:時間.[下半年]
集合(set)是零個、乙個或多個元組的有序集合。集合最常用於在mdx查詢中定義軸維度和切片器維度,並且同樣可能只具有單個元組或可能在某些情況下為空。在mdx語法中,元組用花括號{}來構造集合
舉例,下面是具有兩個元組的集合:
乙個集合可包含同乙個元組不止一次的出現。這樣也是可以的:
集合值以元組表示的一組成員組合,或指集合中的元組所代表的單元中的值,視集合使用的上下文而定。
注意:單個元組的集合不等於元組。如不等於 時間.[下半年]。
在mdx語法中,很多函式語義中包含元組和集合,作為引數或者返回值。
mdx基本語法結構
先看看mdx基本語法結構:
select [axis specification] on columns,
[axis specification] on rows
from
[cube name]
where
[silcer specification]
1、[axis specification]可以看成是軸的成員選擇。
2、[silcer specification]表示切片上的成員,可以看成過濾資訊,[silcer specification]可選,如果沒有指定,取系統預設的維度成員作為切片
軸維度和切片器維度
當設計多維表示式(mdx)查詢時,應用程式一般檢視多維資料集並將維度集合劃分為兩個子集:
1、軸維度,為多個成員檢索資料的維度
2、切片器維度,為單個成員檢索資料的維度。
因為軸維度和切片器維度都從要查詢的多維資料集的多個維度構造,所以用這些術語將要查詢的多維資料集使用的維度與在由mdx查詢返回的多維資料集中建立的維度區分開。
例如:假定存在名為testcube的多維資料集,具有兩個名為route和time的簡單維度。因為多維資料集的度量值是measures維度的一部分,所以該多維資料集總共有三個維度。查詢要提供乙個矩陣,可以在該矩陣內跨路線和時間比較packages度量值
在下面的mdx查詢例項中,route和time維度用作軸維度,measures維度用作切片器維度。members函式表明要用於構造集合的維度或級別的成員,而不必再mdx查詢中顯示宣告給定維度或級別的各個成員。
select
on columns
on rows
from
testcube
where ([mesures].[packages])
指定維度的內容:
軸維度決定多維結果結果集的邊緣。多維表示式(mdx)使用select子句通過將集合指派到特定軸來指定軸維度。
在下面的語法示例中,每個值定義乙個軸維度。資料集中軸的個數等於多維表示式(mdx)查詢中值的個數。mdx查詢最多可以支援128個指定軸,但幾乎沒有mdx查詢會用到5個以上的軸。
語法可分解為:
::=on
::=columns|rows
軸維度上的只能接受集合,如果是手動指定成員集合,必須用{}包圍,如果使用mdx集合函式,則不需要用{}包圍,因為集合函式返回值為集合。乙個軸維度上可以包含幾個維度,如:
select
oncolumns,
crossjoin(
,
) on rows
from
sales
where
([time].[all time], [employee].[all employee])
columns軸上是手工指定成員元組集合,用{}包圍,rows軸使用集合函式crossjoin,該函式返回兩個集合的交集,rows軸上包含兩個維度state和product。
指定切片器維度的內容
切片器維度篩選器多維資料,可以通過將切片器維度包含在多維表示式(mdx)查詢的where子句來限制所返回的資料。
假定未顯示指派給軸的維度是切片器維度,並用其預設成員進行篩選。則預設成員為最高端別的的第乙個成員。
切片器維度還可通過mdx語法的where子句進行顯示指定。where子句的語法可分解為:
[where ]
切片器維度只可接受評估為單個元組的表示式。如下例所示:
where ([time].[1st half],[route].[nonground])
BI開發之 Mdx基礎語法(1)
mdx為multidimensional expressions的縮寫,多維表示式,是標準的olap查詢語言。在多數olapserver都提供mdx支援,如microsoft sql server olap services,sas,hyperion essbase等。支援多維物件於資料定義和操作。...
BI開發之 Mdx基礎語法
mdx為multidimensional expressions的縮寫,多維表示式,是標準的olap查詢語言。在多數olapserver都提供mdx支援,如microsoft sql server olap services,sas,hyperion essbase等。支援多維物件於資料定義和操作。...
1 基礎語法
1.python原始檔編碼 預設 utf 8 修改 在.py檔案第一行新增 coding cp 1252 2.識別符號 大小寫敏感 首位 字母,下劃線 只能是 其他位組成 字母,下劃線,數字 3.保留字 檢視保留字 import keyword print keyword.kwlist 4.注釋 單...