剛接觸Mondrian,不熟悉若是隻有一個事實表,沒有單獨的維度表,其中事實表就包含維度信息的怎麼作Schema文件。一開始作了不少自關聯,致使性能降低明顯。基本多維度查詢速度就很慢,基本出不來了。ide
其實這種同在事實表的,能夠用退化維度來實現便可。性能
退化維度是這樣的一種維度:因爲它過於簡單而不值得爲它建立一個維表。考慮下面的事實表:
假設咱們爲支付方式列的值建立一個維表:spa
支付方式
Credit
Cash
ATMcode
這個維表沒什麼意義,它只有三個取值,沒有額外的信息,併產生了額外的鏈接開銷。你能夠建立一個退化維度,只要聲明一個維度卻不指定表,Mondrian 會認爲這些列是來自事實表。blog
<Cube name="Checkout"> <Table name="checkout"> <Dimension name="Payment method"> <Hierarchy hasAll="true"> <!-- 這裏沒有Table 元素 --> <Level name="Payment method" column="payment_method" uniqueMembers="true"/> </Hierarchy> </Dimension> <!-- 其餘維度和度量--> </Cube>
注意:ip
因爲沒有鏈接,Dimension 的foreignKey 屬性是沒必要要的,而且Hierarchy 元素沒有Table 子元素或primaryKey 屬性。it
上傳Saiku後分析速度也塊了。io
Schema文件class
<Schema name="FinSchema" description="财务模式" measuresCaption="财务模式"> <Cube name="BalanceCube" caption="资产负债Cube" visible="true" description="资产负债Cube" cache="true" enabled="true"> <Table name="资产负债视图" schema="dbo"> </Table> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="组织" caption="组织编码"> <Hierarchy visible="true" hasAll="true" allMemberName="所有组织" allMemberCaption="所有组织"> <Level name="组织编码" visible="true" column="组织编码" nameColumn="组织名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> <Level name="组织名称" visible="true" column="组织名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="年"> <Hierarchy name="YearHierarchy" visible="true" hasAll="true" allMemberName="所有年" allMemberCaption="所有年"> <Level name="年" visible="true" column="年" type="Integer" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> <Level name="期间" visible="true" column="期间" type="Integer" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="账簿"> <Hierarchy name="BookHierarchy" visible="true" hasAll="true" allMemberName="所有账簿" allMemberCaption="所有账簿"> <Level name="账簿名称" visible="true" column="账簿名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="项目分类"> <Hierarchy name="ItemTypeHierarchy" visible="true" hasAll="true" allMemberName="所有分类" allMemberCaption="所有分类"> <Level name="项目分类" visible="true" column="项目分类" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="项目名称"> <Hierarchy name="ItemHierarchy" visible="true" hasAll="true" allMemberName="所有项目" allMemberCaption="所有项目"> <Level name="项目名称" visible="true" column="项目名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Measure name="年初数" column="年初数" aggregator="sum" visible="true"> </Measure> <Measure name="期末数" column="期末数" aggregator="sum" visible="true"> </Measure> </Cube> </Schema>