前面几篇文章一经介绍过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]