Mondrian Schema workbench工作介面 簡介
Mondrian Schema workbench工作介面 簡介
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 |
標題,用來顯示時使用。 |