即使你無需知道所有成千上萬的語言和工具來處理各種程序
但是你應該知道當需要它們的時候如何選擇它們
現在讓我們看看微軟件SQL Server分析服務支持的多維表達語言(MDX)
雖然我不可能在一篇簡短的文章介紹所有的語言
但我可以為你提供一個大致的輪廓
以便讓你在需要的時候如何去選擇
OLTP vs OLAP 理解數據庫兩個類之間的定義是非常重要的
諸如SQL Server的關系數據庫有時候也被稱為在線處理過程(OLTP)數據庫
這樣的數據庫已經被優化而可以高效率地存儲和獲取簡單的各種信息
例如
你可以知道公司倉庫的Colony Bagels的銷售情況
或者
的七月份的銷售情況
為了獲取這樣的信息
你可以編寫如下的SQL查詢語句
SELECT SUM(Sales
[Unit Sales])
FROM (Sales INNER JOIN Stores
ON Sales
StoreID = Stores
StoreID)
INNER JOIN Products
ON Sales
ProductID = Products
ProductID
WHERE Stores
StoreCity =
Corvallis
AND Products
ProductName =
Colony Bagels
AND Sales
SaleDate BETWEEN
AND
對於獲取特定信息
這樣的查詢是相當出色的
但是OLTP數據庫和SQL查詢發生異常通常是在數據量很大的時候
你如何知道以不同狀態存儲的產品之間的區別呢?當然
你可以編寫一個SQL查詢來獲取這樣的信息
但因為它要涉及到所有的源數據
所以這樣的查詢會變得相當的緩慢
連接與聯合也會變得很狹窄
使用在線處理過程(OLAP)會避免這樣的窘境
OLAP數據庫可以從OLTP數據庫(或其他數據庫)中得到它們的源數據
但它們以多維形式存儲
一個OLAP數據庫可以以不同狀態和不同產品而預先計算所有的數據
簡化信息的不同類型被稱為維數(dimensions)
通過多維簡化大量數據的數據結構被稱為一個立體(cube)
簡化信息被稱為量度(measure)
任何一個立體都有一個或多個維數和量度
建立一個立體需要花時間和計算
馬力(horsepower)
通常這樣過程可以以固定的時間間隔進行
這一方法的好處是一個立體建立之後
浏覽時無需要涉及到原始數據
圖A顯示了關於Microsoft SQL Server 分析服務的Sales立體總貌
圖 A 在一個立體中浏覽數據
使用MDX MDX在語法上與SQL很相似
但它卻具備處理一個OLAP立體中多維數據的更好功能
對於絕大多數的通用任務
你都可以使用MDX來獲取一個立體中的信息
畢竟
OLAP數據庫的主要作用就是更容易地得到簡化信息
具體實現這一功能即MDX SELECT語句
這與SQL SELECT語句有很大的區別
一個MDX SELECT語句可以表達如下
SELECT [
…]
FROM
WHERE
axis語句指明了要返回的簡化信息通常它們都是一些維數Cube語句指定包含數據的OLAP立體Slicer語句指定要返回的相關數據通常是量度以下的MDX查詢將獲得需要的信息
SELECT
[Store][Store Country][USA]Children ON COLUMNS
[Product][All Products][Food]Children ON ROWS
FROM [Sales]
WHERE ([Measures][Unit Sales])
在這種情況下有兩種axis規則其中一個為輸出的縱數另一個為輸出的行數每一種規則都指定了維數的一部分圖B顯示了運行MDX范例程序的結果
圖 B
運行一個MDX查詢
MDX的深度
還有更多的MDX我無法在一個簡單的查詢為你提供所有內容當然以下給出了可以使用MDX來處理高級任務的列表
可以返回多達維數的結果(雖然你無法找到顯示這些維數的工具)
查找最大或最小數值
靈活的排列結果
結合現有的量度計算新的成員
返回單個量度的屬性
格式結果
對比不同的時間間隔
在外部類庫中定義常用功能
MDX的目標非常明確那就是聯合分析服務來提供獲取大批數據的有效機制任何時候每一步工作都圍繞大規模數據庫而開展你應該把MDX當成解決問題的一種工具
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22138.html