MDX語句比SQL語句

2021-05-25 01:17:49 字數 1586 閱讀 2352

多維表示式 (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 本來意圖是為了提供一種查詢多維資料的簡單而有效的方法,所以它採用了一致且易於理解的方式使使用者認清二維查詢和多維查詢在概念上的區別 .

SQL語句實現上期比統計例項

使用潤幹的客戶可以通過位移座標實現,上期比 同期比等資料的計算,但當其授權檔案中沒有位移座標的功能點的時候,實現起來就比較困難了,通常建議客戶在sql中計算得出。下面就是通過sql語句計算出上期比的例項。資料結構如下 其中的資料為 報表中的資料集如下所示 select temp2.nian 年,te...

SQL語句 limit 語句

select from table limit offset,rows rows offset offset 在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行資料,這個時候怎麼辦呢?不用擔心,mysql 已經為我們提供了上面這樣乙個功能。limit 子句可以被用於強制 select 語句返回...

SQL語句 UPDATE語句

update students set sname abcd gender 1 where sid 1 update students,students2 set students.sname students2.sname,students.gender students2.gender wher...