MDX 中的重要概念 (MDX)
您可以使用多維表達式 (MDX) 查詢多維數據或創建用于多維數據集的 MDX 表達式,但是需要先了解一下 Microsoft SQL Server 2005 Analysis Services (SSAS) 維度概念和術語。下面一節簡要介紹了您需要了解的基本維度建模概念和術語。隨后各節說明了如何應用這些概念。
有關詳細信息,請參閱 Microsoft TechNet 網站 SQL Server 2005 – Analysis Services 頁面中的“其他資源”部分。有關與 MDX 查詢和計算相關的性能問題的詳細信息,請參閱 SQL Server 2005 Analysis Services 性能指南中的“編寫有效的 MDX”部分。
?維度建模術語和概念Microsoft SQL Server 2005 Analysis Services (SSAS) 多維數據集是根據度量值、維度和維度屬性來組織的。下表說明了使用 MDX 表達式語言所需了解的維度建模術語和概念。
數據庫維度 (Database dimension)“數據庫維度”是與某個鍵屬性相關的維度屬性的集合,而該鍵屬性又與度量值維度中的事實數據相關。
“維度屬性”被綁定到維度表中的一個或多個列并包含成員。維度屬性可以包含客戶名稱、月份名稱和產品名稱。
“成員”是維度屬性(包括度量值維度)的值。層次結構中的成員可以是葉成員、父成員、數據成員或“(全部)”成員。
“度量值”是來自事實數據表的值,也稱為“事實數據”。度量值維度的值有時也通稱為“成員”。度量值通常是數值,但也可以是字符串值。
“度量值維度”是包含多維數據集中所有度量值的維度。度量值維度是一種特殊的維度,其中的成員通常是根據各個維度屬性(存在指定的度量值)的當前成員(通常采用求和或計數方式)進行聚合。
“度量值組”是 SQL Server 2005 Analysis Services 多維數據集中的相關度量值集合(通常是來自同一事實數據表的度量值)。在 SQL Server 2005 Analysis Services 中,一個多維數據集可包含多個度量值組。
“(全部)”成員是屬性層次結構或用戶定義的層次結構中的所有成員的計算值。
“計算成員”是在查詢時定義和計算的維度成員。可以在用戶查詢或 MDX 計算腳本中定義計算成員,并將其存儲在服務器上。 一個計算成員對應于定義它們的維度中的多個維度表行。
“數據成員”是在父子層次結構中與父成員相關聯的子成員。數據成員包含其父成員的數據值,而不是該父成員的子級的聚合值。
“父成員”是父子層次結構中的成員,包含其子級的聚合值。
“葉成員”是層次結構中不包含子級的成員。
“子成員”是層次結構中位于頂層下面的成員。
數據庫維度的“鍵屬性”是維度中的所有非鍵屬性(以直接或間接方式)所鏈接到的屬性。鍵屬性通常也是粒度屬性。
多維數據集維度的屬性,它將維度鏈接到度量值維度內度量值組中的事實數據。如果粒度屬性和鍵屬性為不同的屬性,則非鍵屬性必須直接或間接地鏈接到粒度屬性。在多維數據集中,粒度屬性定義維度的粒度。
“多維數據集維度”是多維數據集中的數據庫維度實例。
“屬性層次結構”是包含以下級別的屬性成員層次結構:
- 包含所有非重復屬性成員的葉級別,葉級別的各個成員也稱為“葉成員”。
- 中間級別(如果屬性層次結構為父子層次結構)。
- 可選的“(全部)”級別 (IsAggregatable=True),它包含屬性層次結構的葉成員的聚合值。“(全部)”級別的成員也稱為“(全部)”成員。
默認情況下,將為每個維度屬性定義屬性層次結構 (AttributeHierarchyEnabled=True)。屬性層次結構默認為可見 (AttributeHierarchyVisible=True)。
“均衡層次結構”是頂級成員與任何葉成員之間存在相同級別數的層次結構。
請參見“非均衡層次結構 (Unbalanced hierarchy)”。
“非均衡層次結構”是頂級與葉級之間存在不同級別數的層次結構。父子層次結構即是不齊整層次結構的一個例子。非均衡層次結構也稱為“不齊整層次結構”。
“父子層次結構”是一種將維度屬性設置為 parent 類型的特殊的屬性層次結構。父子層次結構是由子成員和父成員構成的非均衡層次結構。父子層次結構包含以下級別:
- 包含父成員子級的子級別。父成員的子級包含聚合到父成員的屬性成員(包括數據成員)。
- 包含父成員的中間級別。
- 可選的“(全部)”級別 (IsAggregatable=True),它包含父子層次結構葉成員的聚合值,“(全部)”級別的成員也稱為“(全部)”成員。
- 每個維度中只能存在一個父子層次結構,并且必須與鍵屬性相關。
“用戶定義的層次結構”是屬性層次結構的均衡層次結構,旨在幫助用戶瀏覽多維數據集數據。用戶定義的層次結構不添加到多維數據集空間。在某些情況下可以隱藏用戶定義的層次結構中的級別并使其以非均衡的形式顯示。
“屬性關系”是屬性間的一對多關系,例如州省市自治區和城市維度屬性間的關系。
成員屬性 是特性成員的屬性,例如客戶的性別或產品的顏色。
多維數據集中的“單元”是度量值維度成員的成員與多維數據集中各個屬性層次結構的成員相交處所在的空間。
- 度量值維度的成員可以是葉成員(單個事實數據)或聚合成員(例如,特定年份聚合的銷售額)。
- 維度的成員可以是葉成員、數據成員、父成員或“(全部)”成員。
“多維數據集空間”是多維數據集屬性層次結構的成員與多維數據集的度量值的交集。
“子多維數據集”是表示多維數據集的篩選視圖的多維數據集子集。可以使用 MDX 計算腳本中的 Scope 語句或 MDX 查詢中的嵌套 select 語句定義子多維數據集。
用 MDX 查詢中的嵌套 select 語句定義的子多維數據集包含符合子多維數據集定義的所有成員,其結果如下:
- 包含層次結構的“(全部)”成員與包含層次結構的每個葉成員的結果是相同的。
- 包含任何成員將包括其祖先和后代。
- 包含用戶定義的層次結構中某級別的每個成員將包含該用戶定義的層次結構中的所有成員,但可排除不與此級別成員共存的其他層次結構的成員(例如不包含客戶的城市)。
- 多維數據集中的每個“(全部)”成員始終存在于從該多維數據集創建的子多維數據集中。
- 子多維數據集中的聚合值將進行直接求和。
“元組”根據包含多維數據集各屬性層次結構中某個屬性的屬性成員的組合對單元進行唯一標識。在 MDX 查詢或表達式中定義元組時,不必顯式包含每個屬性層次結構中的屬性成員。如果屬性層次結構中的成員未顯式包含在查詢或表達式中,則該屬性層次結構的默認成員為隱式包含在元組中的屬性成員。除非在多維數據集中進行顯式定義,否則每個屬性層次結構的默認成員均為“(全部)”成員(如果存在“(全部)”成員)。如果屬性層次結構中不存在“(全部)”成員,則默認成員為屬性層次結構中的頂級成員。除非顯式定義了默認度量值,否則默認度量值為多維數據集中指定的第一個度量值。有關詳細信息,請參閱定義默認成員和 DefaultMember (MDX)。
例如,以下元組通過僅顯式定義 Measures 維度的一個成員來標識 Adventure Works 數據庫中的一個單元。
復制代碼 (Measures.[Reseller Sales Amount])上面的示例唯一標識了由 Measures 維度的 Reseller Sales Amount 成員和多維數據集各屬性層次結構的默認成員組成的單元。默認成員為除 Destination Currency 屬性層次結構之外的各個屬性層次結構的“(全部)”成員。Destination Currency 層次結構的默認成員為 US Dollar 成員(此默認成員是在 MDX 腳本中為 Adventure Works 多維數據集定義的)。
| 元組中屬性層次結構的成員還受維度中定義的屬性之間的關系影響。有關詳細信息,請參閱下面的屬性關系和多維數據集空間。 |
以下查詢將返回前面示例指定元組所引用的單元的值 ($80,450.596.98)。
復制代碼 SELECT Measures.[Reseller Sales Amount] ON COLUMNS FROM [Adventure Works]| 為查詢中的集(此處由單個元組構成)指定軸時,必須在為行軸指定集之前先為列軸指定集。列軸也可稱為“axis(0)”或簡稱“0”。有關 MDX 查詢的詳細信息,請參閱基本 MDX 查詢 (MDX)。 |
如前面的示例所示,您可以在查詢中使用元組返回該元組所引用的單元的值。或者您也可以在表達式中使用元組顯式引用該元組中指定的成員。查詢或表達式可使用返回元組或獲取元組的函數。元組可用來引用它所指定的單元的值,或者用來指定成員組合(當元組用在函數中時)。
元組的“維數”指元組中成員的序列或順序。由于隱式成員總是以相同的順序出現,因此維數通常是針對元組的顯式定義成員而言。定義元組集時,元組成員的順序非常重要。以下示例在列軸上的一個元組中包含了兩個成員。
復制代碼 SELECT ([Measures].[Reseller Sales Amount],[Date].[Calendar Year].[CY 2004]) ON COLUMNS FROM [Adventure Works]| 從多個維度顯式指定元組中的成員時,必須將整個元組包含在括號中。如果僅指定元組中的一個成員,則括號是可選的。 |
在前面的示例中,查詢中的元組指定返回位于 Measures 維度的 Reseller Sales Amount Measure 與 Date 維度中 Calendar Year 屬性層次結構的 CY 2004 成員相交處的多維數據集單元。
| 屬性成員可以按成員名稱或成員鍵引用。在前面的示例中,您可以將對 [CY 2004] 的引用替換為對 &[2004] 的引用。 |
集是具有相同維數的有序元組集。以下是集的一個示例。
復制代碼 SELECT {([Measures].[Reseller Sales Amount],[Date].[Calendar Year].[CY 2003]),([Measures].[Reseller Sales Amount],[Date].[Calendar Year].[CY 2004])} ON COLUMNS FROM [Adventure Works]| 用大括號 {} 指定元組集。 |
在前面的示例中,集中的每個元組均具有相同的維數,因為每個元組的第一個成員都是 Measures 維度中的成員,并且每個元組的第二個成員都是 Calendar Year 屬性層次結構中的成員。如果這兩個元組中任意一個元組的第二個成員來自 Date 維度(例如 Calendar Month)中的不同屬性層次結構,您將收到維數不同的錯誤消息。
| 您可以用別名創建集(稱為“命名集”)。處理復雜的 MDX 表達式時,使用命名集可使 MDX 查詢更易于理解或重用。若要使用命名集,請在集標識符的后面使用“AS”,并在該詞之后跟隨所需別名。 |
前面,我們將“多維數據集空間”定義為其屬性層次結構的成員的交集。“自動共存”的概念將此多維數據集空間限制為那些實際存在的單元。維度中屬性層次結構的成員可能不與相同維度中其他屬性層次結構的成員共存。
例如,某多維數據集具有 City 屬性層次結構、Country 屬性層次結構和 Internet Sales Amount 度量值,則此多維數據集的空間僅包含那些共存的成員。例如,如果 City 屬性層次結構包含城市 New York、London、Paris、Tokyo 和 Melbourne,而 Country 屬性層次結構包含國家(地區)United States、United Kingdom、France、Japan 和 Australia,則該多維數據集的空間不包含 Paris 和 United States 相交處的空間(單元)。
當查詢單元不存在時,不存在的單元返回空,即它們無法包含計算結果,并且您不能定義寫入此空間的計算。例如,下面的語句包含不存在的單元。
復制代碼 SELECT [Customer].[Gender].[Gender].Members ON COLUMNS, {[Customer].[Customer].[Aaron A. Allen],[Customer].[Customer].[Abigail Clark]} ON ROWS FROM [Adventure Works] WHERE Measures.[Internet Sales Amount]| 此查詢使用 Members (Set) (MDX) 函數返回列軸上 Gender 屬性層次結構的成員集,并將此集與行軸上 Customer 屬性層次結構的指定成員集相交。 |
執行前面的查詢時,Aaron A. Allen 與 Female 相交處的單元將顯示空。 同樣,Abigail Clark 與 Male 相交處的單元也將顯示空。這些單元不存在并且不能包含值,但不存在的單元可出現在查詢返回的結果中。
如果使用 Crossjoin (MDX) 函數返回同一維度屬性層次結構中的屬性層次結構成員的叉積,自動共存將限制只返回那些實際存在的元組集,而不是返回整個笛卡爾積。例如,運行以下查詢并檢查其結果。
復制代碼 SELECT CROSSJOIN({[Customer].[Country].[United States]},[Customer].[State-Province].Members) ON 0 FROM [Adventure Works] WHERE Measures.[Internet Sales Amount]| 請注意 0 用于表示列軸的名稱,它是列軸“axis(0)”的簡稱。 |
前面的查詢僅為查詢中每個屬性層次結構的共存成員返回單元。前面的查詢還可以使用 * (Crossjoin) (MDX) 函數中新的 * 變量來編寫。
復制代碼 SELECT [Customer].[Country].[United States] * [Customer].[State-Province].Members ON 0 FROM [Adventure Works] WHERE Measures.[Internet Sales Amount]前面的查詢還可以通過以下方式來編寫:
復制代碼 SELECT [Customer].[State-Province].Members ON 0 FROM [Adventure Works] WHERE (Measures.[Internet Sales Amount],[Customer].[Country].[United States])雖然結果集中的元數據將不同,但返回的單元值將是相同的。例如,在前面的查詢中,Country 層次結構已移到切片器軸(在 WHERE 子句中),因此沒有顯式顯示在結果集中。
前面的這三個查詢均闡釋了 SQL Server 2005 Analysis Services 中自動共存行為所帶來的影響。
?用戶定義的層次結構和多維數據集空間本主題前面的示例使用屬性層次結構定義了多維數據集空間中的位置。不過,您還可以使用根據維度中屬性層次結構所定義的用戶定義的層次結構來定義多維數據集空間中的位置。用戶定義的層次結構是屬性層次結構的層次結構,旨在幫助用戶瀏覽多維數據集數據。
例如,上節中的 CROSSJOIN 查詢也可以按照如下方式編寫:
復制代碼 SELECT CROSSJOIN({[Customer].[Country].[United States]},[Customer].[Customer Geography].[State-Province].Members) ON 0 FROM [Adventure Works] WHERE Measures.[Internet Sales Amount]在前面的查詢中,Customer 維度中的 Customer Geography 用戶定義的層次結構用于定義先前使用屬性層次結構定義的多維數據集空間中的位置。可以使用屬性層次結構或用戶定義的層次結構來定義多維數據集中的同一個位置。
?屬性關系和多維數據集空間定義相關屬性間的屬性關系(通過促進相應聚合的創建)將提高查詢性能,并影響與屬性層次結構成員一同顯示的相關屬性層次結構的成員。例如,您定義了包含 City 屬性層次結構的成員的元組并且該元組未顯式定義 Country 屬性層次結構成員時,您可能希望默認 Country 屬性層次結構成員是 Country 屬性層次結構的相關成員。不過,只有定義了 City 屬性層次結構和 Country 屬性層次結構之間的屬性關系時,才會出現上述預期結果。
以下示例返回未顯式包含在查詢中的相關屬性層次結構的成員。
復制代碼 WITH MEMBER Measures.x AS Customer.Country.CurrentMember.Name SELECT Measures.x ON 0, Customer.City.Members ON 1 FROM [Adventure Works]| 請注意,WITH 關鍵字與 CurrentMember (MDX) 和 Name (MDX) 函數一起用于創建在查詢中使用的計算成員。有關詳細信息,請參閱基本 MDX 查詢 (MDX)。 |
在前面的查詢中,返回了與 State 屬性層次結構各成員相關聯的 Country 屬性層次結構的成員名稱。出現了預期的 Country 成員(因為定義了 City 和 Country 屬性之間的屬性關系)。不過,如果在同一維度中沒有定義屬性層次結構間的任何屬性關系,將返回“(全部)”成員,如以下查詢所示。
復制代碼 WITH MEMBER Measures.x AS Customer.Education.Currentmember.Name SELECT Measures.x ON 0, Customer.City.Members ON 1 FROM [Adventure Works]在前面的查詢中,返回了“(全部)”成員(“All Customers”),因為 Education 和 City 間不存在任何關系。因此,Education 屬性層次結構的“(全部)”成員將是任何涉及 City 屬性層次結構(未在其中顯式提供 Education 成員)的元組中使用的 Education 屬性層次結構的默認成員。
?計算上下文每個集、成員、元組或數值函數均在整個 MDX 表達式或語句的上下文中執行。當參數(例如元組)傳遞到函數時,僅顯式提供多維數據集空間中的若干個坐標。其他坐標根據當前計算上下文來獲取。按照以下順序確定未指定的單元坐標和屬性成員的計算上下文:
| 在切片器軸和其他軸上指定特定屬性的單元坐標時,函數中指定的坐標可能優先確定軸上的集的成員。Filter (MDX) 和 Order (MDX) 函數是這類函數的示例 - 您可以按屬性成員(通過 WHERE 子句或 FROM 子句中的 SELECT 語句排除在計算上下文之外)對結果進行篩選或排序。 |
| 若要提高查詢性能,應在解析過程中盡早地消除成員和元組。通過這種方式,針對最終成員集的復雜查詢時間計算涉及的單元最少。 |
概念
MDX 語言參考 (MDX)其他資源
多維表達式 (MDX) 參考幫助和信息
獲取 SQL Server 2005 幫助 ?更改歷史記錄| 2006 年 7 月 17 日 | 更改的內容:
|
轉載于:https://www.cnblogs.com/focustea/archive/2009/04/08/1431519.html
總結
以上是生活随笔為你收集整理的MDX 中的重要概念 (MDX)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP组件AspJpeg(加水印)
- 下一篇: Server Too Busy