mdx主要是用於olap查詢語言,全稱:multi-dimensional expression。語法類似於oltp的結構化查詢語言sql,但又有很大的區別。看了一下sql-server的聯機幫助,結合公司的現有olap實現,簡單的學習了一下。
1:概念:層次結構
對於其它幾個概念:維度,級別,成員,屬性都比較好理解,只是層次結構的概念,開始有些模糊。
實際上,層次結構處於維度和級別之間,體現的是單一維度可以演化出的多個級別方案。比如產品維度,它可以有 大分類》明細分類》產品名稱 一種級別方案,還可以有 分類》產品名稱 另一種級別方案。這兩種方案就構成了兩種層次結構。
在應用中,一般只採用一種級別方案,比如我們公司的olap實現產品提供的模型定義,就不體現層次結構的概念,也就是說,系統只提供
乙個層次結構。想一想,對於olap中的某乙個主題分析中的某個維度,一般也只會有一種固有級別方案。
2:語法:
最基本的語法:select 軸1,軸2,…… from 立方體模型名 where 切片
可以看到,非常類似於sql的語法:select 列1,列2…… from 表1,表2…… where 條件子句。
首先,需要理解軸的概念:
軸:相當於sql裡的列,想象軸,需要有點立體概念,或者,我們把問題簡化,對於平面表的展示,只會存在兩個軸,也就是列軸和行軸。現有的大多數olap展示,也只體現這兩個軸,我們公司的產品也不例外。說具體一點,軸對應於乙個集合。
集合:由元組形成,
元組:可包括多個維度中的成員,也可包括來自同乙個維度的多個成員。
成員:維度中一次或多次資料出現的項。
再看看立方體模型:這個很好理解,也就是主題分析時形成的模型方案了,mdx只支援單一模型。
最後看一下 切片:這和sql中的篩選一樣。不過,因為olap的資料是立體的,多維的,要變成平面,就需要切啊,切啊,把一些不需要展示的維度設定固定值(也就是切一下)。注意:當不指定任何切片時,一般的實現是將未出現的維度的預設成員值做為切片值。
3:計算成員列
一般用 with member 計算成員 as '' 來生成計算成員列,然後在select中引用。
as中的表示式,可以使用mdx函式。
4:mdx函式
函式很多,除了常見的數值,邏輯,字串處理,特有的是:維度/層次/級別函式,成員函式,聚合函式。
某些函式是具有很強的業務性的:比如 bottomsum:取出指定和值的底部若干行。這類函式,需要在實際應用在才能體會。
5:solve_order
這個用來指定計算成員中的計算傳遞順序,因為計算成員間有乙個計算傳遞和順序的問題。
6:成員屬性
屬性作為一種擴充,也就是將某些列作為維度的擴充值,進行補充說明。一般在定製立方體模型時確定。在我們的實現中,還將屬性作為了一種配置方案,比如 caption屬性用來作為維度的顯示值,name屬性作為標識值。這個具體要看前端展示的解釋方式
7:單元屬性
主要完成單元格的樣式設定。樣式包括:字型,字串格式,前景,背景……
單元屬性更多時候只是展示的檢視需要,所以,在實現時也可以在前端處理,比如網格本身的屬性設定。比如,我們現有的實現中,還提供了一種條件的設定,可以通過條件判定進行區分的樣式顯示,滿足特定的展示需求。
學習筆記 雜湊學習筆記
hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...
學習筆記 CentOS 學習筆記01
簡單的做個課堂筆記 虛擬機器用的是vmware,系統是centos cd etc sysconfig network scripts pwdls 顯示列表 cat ifcfg eth0 檢視檔案內容 vi ifcfg eth0 進入vi編輯器 onboot no 原始設定 x逐字刪除 d刪除整行 a...
筆記 spring cloud 學習筆記
1 spring cloud 是什麼 spring cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具 例如配置管理,服務發現,斷路器,智慧型路由,微 控制匯流排 分布式系統的協調導致了樣板模式,使用spring cloud開發人員可以快速地支援實現這些模式的服務和應用程式。他們將在任...