BI開發之 Mdx基礎語法

2021-06-27 05:19:58 字數 3783 閱讀 5128

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

on columns,

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基礎語法(1)

mdx為multidimensional expressions的縮寫,多維表示式,是標準的olap查詢語言。在多數olapserver都提供mdx支援,如microsoft sql server olap services,sas,hyperion essbase等。支援多維物件於資料定義和操作。...

CSS之基礎語法

css規則由兩個主要的部分構成 選擇器,以及一條或者多條宣告.selector 選擇器通常是你需要改變樣式的html元素.每條宣告由乙個屬性和乙個值組成.屬性 property 是你希望設定的樣式屬性 style attribute 每個屬性有乙個值,屬性和值被冒號分開.selector 下面這行 ...