前面幾篇文章一經介紹過saiku、模式文件和MDX的關係。通俗點說模式文件(Schema)就是一個xml,裏面定義了一個虛擬立方體,共MDX查詢語言使用。html
Schema 最頂層ide
Cube 立方體,以事實表爲中心,圍繞若干維度表spa
Table 事實表code
Dimension 維度xml
Hierarchy 維度層次htm
Level 一個層次blog
Measure 度量it
建立原始數據表,這些表參考:http://www.cnblogs.com/liqiu/p/5202708.html 裏面的建表語句!io
根據建立的數據表,我寫了一個模式文件:class
<Schema name="SaleSchema"> <Cube name="SalesCube"> <Table name="sale"> </Table> <Dimension type="StandardDimension" visible="true" foreignKey="cusid" highCardinality="false" name="dimCustomer"> <Hierarchy visible="true" hasAll="true" allMemberName="allCustomer"> <Table name="customer"> </Table> <Level name="gender" visible="true" column="gender" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Measure name="saleNumber" column="num" aggregator="sum" caption="NumTitle" visible="true"> </Measure> <Measure name="saleAmount" aggregator="sum" caption="allSaleTitle" visible="true"> <MeasureExpression> <SQL dialect="generic"> <![CDATA[(unitprice*num)]]> </SQL> </MeasureExpression> </Measure> </Cube> </Schema>
這裏面使用了兩張表,事實表:sale和消費者表customer,其中sale表裏面的cusid是customer表的主鍵
這裏指的是立方體裏面的事實表,sale
這裏僅僅聲明瞭一個維度,消費者維度
<Dimension type="StandardDimension" visible="true" foreignKey="cusid" highCardinality="false" name="dimCustomer"> <Hierarchy visible="true" hasAll="true" allMemberName="allCustomer"> <Table name="customer"> </Table> <Level name="gender" visible="true" column="gender" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension>
裏面有個維度層次,裏面僅僅包含一個層次,性別:gender
<Measure name="saleNumber" column="num" aggregator="sum" caption="NumTitle" visible="true"> </Measure>
是銷量指標,另一個不作太多解釋了
select
{[Measures].saleNumber,[Measures].saleAmount}
on columns,
{([dimCustomer].[allCustomer])}
on rows
from [salesCube]