Mondrian系列(四)-cube、度量、维度初窥

1.cube,立方体,是一种有名称的度量和维度的集合。度量和维度的共同点是事实表,例如下面例子中的事实表"sale_face_1997”。正如我们所见,事实表中保存了要被计算的度量,并且包含关联维度的表。

<cube name="”Sales”"><br><table name="”sales_fact_1997”/"> <br> … <br> </table> <p>事实表使用</p> <table>标签定义,如果事实表不在默认的schema中,可以通过显式的schema指定,例如 <table border="0" cellspacing="0" cellpadding="2" width="400"><tbody><tr><td valign="top" width="400"> <table schema="”dmart”" name="”sales_fact_1997”/"></table> <p>也可以通过<view>标签定义更加复杂的SQL语句,注意,<join>标签在事实表中不支持。</join></view></p> <p>2.Measure,度量,叫做Sales的Cube定义了一系列的度量,包括"Unit Sales”和"Store Sales”。如下面的例子:</p> <table border="0" cellspacing="0" cellpadding="2" width="785"><tbody><tr> <td valign="top" width="783"><measure name="”Unit" sales column="”unit_sales”" aggregator="”sum”" datatype="”Integer”" formatstring="”#,###”/"><br><measure name="”Store" sales column="”store_sales”" aggregator="”sum”" datatype="”Numeric”" formatstring="”#,###.00”/"></measure></measure></td> </tr></tbody></table> <p>每个度量都有"name“属性,对应于在事实表中的列,"aggregator”属性通常包括sum/count/min/max/avg和distinct-count,注意,如果你的cube包括父子层次结构,distinct-count会有一些限制。</p> <p>datatype属性是可选的,主要说明在Mondrian的缓存中,cell值是如何表现的,以及他们如何通过XML返回用于分析。datatype属性包括String/Integer/Numeric/Boolean/Date/Time/Timestamp,除count和distinct-count外,默认是Numeric,count和distinct-count默认为Integer。</p> <p>formatString属性也是可选的,这个属性指明在输出时的格式。在上面例子中,我们可以设置对Unit Sales输出格式不带小数,Store Sales个带两位小数。格式中的","和"."符号是区域相关的,因此,如果你是在意大利,则小数应该为”48.123,45”,通过使用高级字符格式,可以获得更广泛的效果。</p> <p>caption属性也是可选的,度量可以设置标题属性用于返回而不使用名称,Member.getCaption()方法会返回caption。对于例如(Σ或Π)这样的字符,可以通过定义caption来显示,例如:</p> <table border="0" cellspacing="0" cellpadding="2" width="743"><tbody><tr> <td valign="top" width="741"> <measure name="”Sum" x column="”sum_x”" aggregator="”sum”" caption="”Σ"></measure> 显示的就是Σ X</td> </tr></tbody></table> <p>如果不从列中取度量,也能使用cell reader或使用SQL表达式计算度量值。看下面的例子:</p> <table border="0" cellspacing="0" cellpadding="2" width="740"><tbody><tr> <td valign="top" width="738"><measure name="”Promotion" sales aggregator="”sum”" formatstring="”#,###.00”"><br><measureexpression><br><sql dialect="”generic”"><br> (case when sales_fact_1997.promotion_id=0 then 0 else sales_fact_1997.store_sales end) <br></sql><br></measureexpression><br></measure></td> </tr></tbody></table> <p>在上面的例子中,如果有促销才会包含到促销汇总中,可以使用包括子查询的专门的SQL表达式。基础数据库必须能支持在聚集上下文中的SQL表达式。不同数据库间的差异通过<sql>标签中的dialect属性来设置。</sql></p> <p>度量也可以使用cell格式化器来做专门的格式化</p> <p>3.Dimension,Hierarchy,level 维度、层次和等级</p> <p>我们先看一些定义:</p> <ul> <li>member,是由一系列特定属性值决定的包含维度的点。例如,性别层次有两个成员,M和F。或者商店维度中的名称、城市、省、国家。</li> <li>hierarchy,是为了便于分析由一系列的成员所组成。例如,store层级由一系列的商店名称、城市、省和国家组成。层次可以组织成中间的子汇总,例如,对某个省的子汇总,可以统计省下面的所有城市。</li> <li>level,到层次根有同样距离层次的成员的集合。</li> <li>dimension,是层次的集合,在同一个事实表有不同的层次的集合。为了统一,度量也被称为特殊的维度。</li> <li>让我们看一个例子:</li> <table border="0" cellspacing="0" cellpadding="2" width="732"><tbody><tr><td valign="top" width="730"><dimension name="”Gender”" foreignkey="”customer_id”"><br><hierarchey hasall="”true”" primarykey="”customer_id”"><br><table name="”customer”/"> <br><level name="”Gender”" column="”gender”" uniquemember="”true”/"><br><br></level> </table> <p>在上面的例子中,维度Gender包括一个层次,由一个单独的leve叫做Gender构成。(我们以后会看到,有一个特殊的leve叫做[(All)],用于包括总计)</p> <p>维度的值从customer表的gender列中得到,gender列包括两个值,M和F,因此Gender维度包括成员[Gender].[M]和[Gender].[F]。</p> <p>对任意给定的sale,性别维度通过事实表的sales_face_1997.customer_id和维表customer.customer_id关联。</p></hierarchey></dimension></td></tr></tbody></table> </ul> </td></tr></tbody></table> </table></cube>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值