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

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


   

    …

事实表使用

标签定义,如果事实表不在默认的schema中,可以通过显式的schema指定,例如

也可以通过 标签定义更加复杂的SQL语句,注意, 标签在事实表中不支持。

2.Measure,度量,叫做Sales的Cube定义了一系列的度量,包括"Unit Sales”和"Store Sales”。如下面的例子:


每个度量都有"name“属性,对应于在事实表中的列,"aggregator”属性通常包括sum/count/min/max/avg和distinct-count,注意,如果你的cube包括父子层次结构,distinct-count会有一些限制。

datatype属性是可选的,主要说明在Mondrian的缓存中,cell值是如何表现的,以及他们如何通过XML返回用于分析。datatype属性包括String/Integer/Numeric/Boolean/Date/Time/Timestamp,除count和distinct-count外,默认是Numeric,count和distinct-count默认为Integer。

formatString属性也是可选的,这个属性指明在输出时的格式。在上面例子中,我们可以设置对Unit Sales输出格式不带小数,Store Sales个带两位小数。格式中的","和"."符号是区域相关的,因此,如果你是在意大利,则小数应该为”48.123,45”,通过使用高级字符格式,可以获得更广泛的效果。

caption属性也是可选的,度量可以设置标题属性用于返回而不使用名称,Member.getCaption()方法会返回caption。对于例如(Σ或Π)这样的字符,可以通过定义caption来显示,例如:

显示的就是Σ X

如果不从列中取度量,也能使用cell reader或使用SQL表达式计算度量值。看下面的例子:


   
       
            (case when sales_fact_1997.promotion_id=0 then 0 else sales_fact_1997.store_sales end)
       
   

在上面的例子中,如果有促销才会包含到促销汇总中,可以使用包括子查询的专门的SQL表达式。基础数据库必须能支持在聚集上下文中的SQL表达式。不同数据库间的差异通过 标签中的dialect属性来设置。

度量也可以使用cell格式化器来做专门的格式化

3.Dimension,Hierarchy,level 维度、层次和等级

我们先看一些定义:

  • member,是由一系列特定属性值决定的包含维度的点。例如,性别层次有两个成员,M和F。或者商店维度中的名称、城市、省、国家。
  • hierarchy,是为了便于分析由一系列的成员所组成。例如,store层级由一系列的商店名称、城市、省和国家组成。层次可以组织成中间的子汇总,例如,对某个省的子汇总,可以统计省下面的所有城市。
  • level,到层次根有同样距离层次的成员的集合。
  • dimension,是层次的集合,在同一个事实表有不同的层次的集合。为了统一,度量也被称为特殊的维度。
  • 让我们看一个例子:

  •    
           

       
           

    在上面的例子中,维度Gender包括一个层次,由一个单独的leve叫做Gender构成。(我们以后会看到,有一个特殊的leve叫做[(All)],用于包括总计)

    维度的值从customer表的gender列中得到,gender列包括两个值,M和F,因此Gender维度包括成员[Gender].[M]和[Gender].[F]。

    对任意给定的sale,性别维度通过事实表的sales_face_1997.customer_id和维表customer.customer_id关联。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值