Schema
Schema 定義了一個多維數據庫。包含了一個邏輯模型,而這個邏輯模型的目的是爲了書寫 MDX 語言的查詢語句。這個邏輯模型實際上提供了這幾個概念: Cubes (立方體)、維度( Dimensions )、層次( Hierarchies )、級別( Levels )、和成員( Members )。而一個 schema 文件就是編輯這個 schema 的一個 xml 文件。在這個文件中形成邏輯模型和數據庫物理模型的對應。
Cube
一個 Cube 是一系列維度 (Dimension) 和度量 (Measure) 的集合區域。在 Cube 中, Dimension 和 Measure 的共同地方就是共用一個事實表。 Cube 中的有以下幾個屬性:
屬性名 |
含義 |
name |
Cube 的名字 |
caption |
標題 , 在表示層顯示的 |
cache |
是否對 Cube 對應的實表用 mondrian 進行存儲 , 默認爲 true |
enabled |
是布爾型的 , 如果是被激活 ,Cubes 就執行 , 否則就不予理睬,默認爲 true |
Cube 裏面有一個全局的標籤定義了所用的事實表的表名
Dimension
他是一個層次( Hierarchies )的集合 , 維度一般有其相對應的維度表 . 他的組成是由層次( Hierarchies )而層次( Hierarchies )又是有級別( Level )組成 . 其屬性如下:
屬性名 |
含義 |
name |
Dimension 的名稱 |
type |
類型,有兩個可選的類型: StandarDimension 和 TimeDimension ,默認爲 StandardDimension |
caption |
標題 , 在表示層顯示的 |
UsagePrefix |
加前綴 , 消除歧義 |
foreignKey |
外鍵,對應事實表中的一個列,它通過 <Hierarchy> 元素中的主鍵屬性連接起來。 |
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 。 |
Level
級別 , 他是組成 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 地值進行格式化。 |
Join
對於一個 Hierarchy 來說,有兩種方式爲其指定:一種是直接通過一個 Table 標籤指定;一種是通過 Join 將若干張表連接起來指定。一旦採用 Join 的話,那麼就要在 Hierarchy 裏的 primaryKeyTable 屬性指定主表。
Measure
Measure 就是我們要計算的數值,操作的核心。它的屬性如下:
屬性名 |
含義 |
name |
名稱 |
aggregator |
要採用的計算函數 |
column |
要計算的列名 |
formatString |
計算結果的顯示格式。 |
visible |
是否可見 |
datatype |
數據類型,默認爲 Numeric |
formatter |
採用類來對該 Measure 的值進行格式,具體參考 Level 的 formatter 屬性。 |
caption |
標題,用來顯示時使用。 |