Mondrian Schema解析

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

標題,用來顯示時使用。

發佈了25 篇原創文章 · 獲贊 17 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章