[MDX]MDX與SQL的區別

開始學習OLAP相關的知識,學習cube、hierarchy、level、member、drill、dimension、measure等等專業名詞的含義,又接觸了類sql的一個數據抽取語法:MDX,在wordpress上,找到一遍比較詳細的介紹MDX與SQL區別的文章。


原文:http://codex.wordpress.org.cn/MDX


多維表達式 (MDX) 語法乍看起來與結構化查詢語言 (SQL) 的語法非常相似。在很多方面,MDX 所提供的功能也與 SQL 相似;甚至經過努力可以在SQL 中複製某些由 MDX 提供的功能

然而,SQL 和 MDX 之間存在一些顯著區別,並且用戶應當從概念上認清這些區別。以下信息將從 SQL 開發人員的角度,對認清 SQL 和 MDX 之間概念上的區別提供指導。

SQL 和 MDX 之間最顯著的區別在於 MDX 具有引用多個維度的能力。儘管在 Microsoft® SQL Server™ 2000 Analysis Services 中存在單獨使用 SQL 查詢多維數據集的可能性,但是 MDX 所提供的命令卻可以專門檢索具有幾乎任意多個維度的多維數據結構中的數據

SQL 處理查詢時僅涉及列和行這兩個維度。因爲 SQL 只設計用來處理二維表格格式數據,所以"列"和"行"這兩個術語在 SQL 語法中具有意義。

比較而言,MDX 在查詢中則可處理一個、兩個、三個或更多的維度。因爲 MDX 中可以使用多個維度,所以每個維度稱作一個軸。MDX 中的"列"和"行"這兩個術語在 MDX 查詢中僅用作前兩個軸維度的別名;還有其它指派了別名的維度,但對於 MDX 這些別名本身沒有真實意義。MDX 支持這些別名是爲了顯示;許多 OLAP 工具不能顯示具有兩個以上維度的結果集。

在 SQL 中,SELECT 子句用於定義查詢的列布局,而 WHERE 子句用於定義行佈局。可是在MDX 中 SELECT 子句可用於定義幾個軸維度,而 WHERE 子句可用來多維數據限制於特定的維度或成員

在 SQL 中,WHERE 子句用於篩選查詢所返回的數據。在 MDX 中,WHERE 子句用於提供查詢所返回的數據切片。雖然這兩個概念相似,卻不可等同。

SQL 查詢使用 WHERE 子句包含應該或不應該在結果集中返回的項目的任意列表。雖然篩選中長的條件列表可以縮小所檢索數據的範圍,但是不要求子句中的元素必須產生清晰而簡潔的數據子集。

然而在 MDX 中,切片的概念意味着 WHERE 子句中的各個成員標識來自不同維度的數據的不同部分。由於多維數據的結構化結構,不可能請求同一維度的多個成員的切片。因爲這一點,MDX 中的 WHERE 子句能提供清晰而簡潔的數據子集

創建 SQL 查詢的過程也與創建 MDX 查詢的過程不同。SQL 查詢的創建者將二維行集的結構形象化並加以定義,並且編寫對一個或多個表的查詢對該結構進行填充。相反,MDX 查詢的創建者通常將多維數據集的結構形象化並加以定義,並且編寫對單個多維數據集的查詢對該結構進行填充。這可能導致多維數據集具有任意數量的維度,例如,可能存在一個維度的數據集。

SQL 結果集的視覺形象是直觀的;集合是一個行與列組成的二維表格。但是,MDX 結果集的視覺形象就不直觀。因爲多維結果集可以有三個以上的維度,所以將該結構形象化比較困難。要在 SQL 中引用這些二維數據,在引用稱爲字段的單個數據單元時,可以使用適合於數據的任何方法,列名稱和行的唯一標識均可。但是,MDX 在引用數據單元時,不管數據形成的是單個單元還是一組單元,都使用一種非常特定並且統一的語法。

儘管 SQL 和 MDX 具有相似的語法,但是 MDX 語法功能異常強大,而且,它可以非常複雜。然而,因爲設計 MDX 本來意圖是爲了提供一種查詢多維數據的簡單而有效的方法,所以它採用了一致且易於理解的方式使用戶認清二維查詢和多維查詢在概念上的區別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章