1、前言
前面幾篇文章一經介紹過saiku、模式文件和MDX的關系。通俗點說模式文件(Schema)就是一個xml,里面定義了一個虛擬立方體,共MDX查詢語言使用。
2、模式文件
Schema 最頂層
Cube 立方體,以事實表為中心,圍繞若干維度表
Table 事實表
Dimension 維度
Hierarchy 維度層次
Level 一個層次
Measure 度量
事例:
創建原始數據表,這些表參考:http://www.cnblogs.com/liqiu/p/5202708.html 里面的建表語句!
根據創建的數據表,我寫了一個模式文件:
<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表的主鍵
3、Table
這里指的是立方體里面的事實表,sale
4、維度
這里僅僅聲明了一個維度,消費者維度
<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
5、指標
<Measure name="saleNumber" column="num" aggregator="sum" caption="NumTitle" visible="true"> </Measure>
是銷量指標,另外一個不做太多解釋了
6、執行:
select
{[Measures].saleNumber,[Measures].saleAmount}
on columns,
{([dimCustomer].[allCustomer])}
on rows
from [salesCube]