Schema 定義了一個多維數據庫。包含了一個邏輯模型,而這個邏輯模型的目的是爲了書寫 MDX 語言的查詢語句。這個邏輯模型實際上提供了這幾個概念: Cubes (立方體)、維度( Dimensions )、層次( Hierarchies )、級別( Levels )、和成員( Members )。而一個 schema 文件就是編輯這個 schema 的一個 xml 文件。在這個文件中造成邏輯模型和數據庫物理模型的對應。數據庫
一個 Cube 是一系列維度 (Dimension) 和度量 (Measure) 的集合區域。在 Cube 中, Dimension 和 Measure 的共同地方就是共用一個事實表。 Cube 中的有如下幾個屬性:app
屬性名ide |
含義函數 |
name性能 |
Cube 的名字優化 |
captionspa |
標題 , 在表示層顯示的orm |
cachexml |
是否對 Cube 對應的實表用 mondrian 進行存儲 , 默認爲 true接口 |
enabled |
是布爾型的 , 若是是被激活 ,Cubes 就執行 , 不然就不予理睬,默認爲 true |
Cube 裏面有一個全局的標籤訂義了所用的事實表的表名
他是一個層次( Hierarchies )的集合 , 維度通常有其相對應的維度表 . 他的組成是由層次( Hierarchies )而層次( Hierarchies )又是有級別( Level )組成 . 其屬性以下:
屬性名 |
含義 |
name |
Dimension 的名稱 |
type |
類型,有兩個可選的類型: StandarDimension 和 TimeDimension ,默認爲 StandardDimension |
caption |
標題 , 在表示層顯示的 |
UsagePrefix |
加前綴 , 消除歧義 |
foreignKey |
外鍵,對應事實表中的一個列,它經過 <Hierarchy> 元素中的主鍵屬性鏈接起來。 |
你必定要指定其中的各類關係 , 若是沒有指定 , 就默認 Hierarchy 裏面裝的是來自立方體中的真實表 . 屬性以下:
屬性名 |
含義 |
name |
Hierarchy 的名稱,該值能夠爲空,爲空時表示 Hirearchy 的名字和 Dimension 的名字相同。當一個 Dimension 有多個 Hierarchy 時,注意 name 值要惟一。 |
hasAll |
布爾型的 , 決定是否包含所有的成員 member |
allMemberName |
全部成員的名字 , 也就是總的標題 , 例如: allMemberName= 「所有產品」 |
allLevelName |
全部級別的名字,它會覆蓋其下全部的 Member 的 name 和全部的 Level 的 name 屬性的值。 |
allMemberCaption |
例如 : allMemberCaption= 「所有產品」這個是在表示層顯示的內容 |
PrimaryKey |
經過主鍵來肯定成員,該主鍵指的是成員表中的主鍵,該主鍵同時要與 Dimension 裏設置的 foreignKey 屬性對應的字段造成外鍵對應關係 |
primaryKeyTable |
若是成員表不僅一個,而是多個表經過 join 關係造成的,那麼就要經過這個屬性來指明 join 的這些表中,哪個與 Dimension 裏設置的 foreignKey 屬性造成外鍵關係。經過該屬性來指明主表 |
caption |
標題 , 在表示層顯示的 |
defaultMember |
|
memberReaderClass |
設定一個成員讀取器,默認狀況下 Hierarchy 都是從關係型數據庫裏讀取的,若是你的數據不在 RDBMS 裏面的話,你能夠經過自定義一個 member reader 來表現一個 Hierarchy 。 |
級別 , 他是組成 Hierarchy 的部分。屬性不少,而且是 schema 編寫的關鍵,使用它能夠構成一個結構樹, Level 的前後順序決定了 Level 在這棵樹上的的位置,最頂層的 Level 位於樹的第一級,依次類推。 Level 的屬性以下:
屬性名 |
含義 |
name |
名稱 |
table |
該 Level 要使用的表名 |
column |
用上面指定的表中某一列做爲該 Level 的關鍵字 |
nameColumn |
用來顯示的時候使用,若是不定義,那麼就採用上面的 column 的值來進行顯示。 |
oridinalColumn |
定義該 Level 上的成員的顯示順序,若是不指定,那麼採用 column 的值。 |
parentColumn |
在一個有父 - 子關係的 Hierarchy 當中,當前 Level 引用的是其父成員的列名。比如是一張部門表,在一張表裏表現部門的上下級關係,一個是主鍵,確定還有一個字段爲鏈接到該主鍵的外鍵的列名,這裏的 parentColumn 指的就是這個列名。 |
nullParentValue |
若是當前的 Level 是有上下級關係(設置了 parentColumn 屬性),若是該 Level 又處於頂級,咱們須要將頂級的數據取出來,這裏指的是位於頂級的父成員的值,有些數據庫不支持 null, 那麼也可使用 ’0’ 或 ’-1’ 等,這就表示頂級的成員的父 ID 爲 ’0’ 或爲 ’-1’ 。 |
type |
數據類型,默認值爲 string 。固然還能夠是 Numeric 、 Integer 、 Boolean 、 Date 等。 |
uniqueMembers |
該屬性用於優化產生的 SQL ,若是你知道這個級別和其父級別交叉後的值或者是維度表中給定的級別全部的值是惟一的,那麼就能夠設置該值爲 true ,不然爲 false 。 |
levelType |
該 Level 的類型,默認爲 regular (正常的),若是你在其 Dimension 屬性 type 裏選擇了 TimeDimension 那麼這裏就能夠選擇 TimeYears 、 TimeQuarters 、 TimeMonth 、 TimeWeeds 、 TimeDays 。 |
hideMemberIf |
在何時不隱藏該成員,可選的值有三個: Never 、 IfBlankName 、 IfParentName |
approxRowCount |
該屬性能夠用來提升性能,能夠經過指定一個數值以減小判斷級別、層次、維度基數的時間,該屬性在經過使用 XMLA 鏈接 Mondrian 頗有用處。 |
caption |
標題 , 在表示層顯示的 |
captionColumn |
用來顯示標題的列 |
formatter |
該屬性定義了 Member.getCaption() 方法返回的動做值,這裏須要是一個實現了 mondrian.olap.MemberFormatter 接口的類,用來對 Caption 地值進行格式化。 |
對於一個 Hierarchy 來講,有兩種方式爲其指定:一種是直接經過一個 Table 標籤指定;一種是經過 Join 將若干張錶鏈接起來指定。一旦採用 Join 的話,那麼就要在 Hierarchy 裏的 primaryKeyTable 屬性指定主表。
Measure 就是咱們要計算的數值,操做的核心。它的屬性以下:
屬性名 |
含義 |
name |
名稱 |
aggregator |
要採用的計算函數 |
column |
要計算的列名 |
formatString |
計算結果的顯示格式。 |
visible |
是否可見 |
datatype |
數據類型,默認爲 Numeric |
formatter |
採用類來對該 Measure 的值進行格式,具體參考 Level 的 formatter 屬性。 |
caption |
標題,用來顯示時使用。 |