??xml version="1.0" encoding="utf-8" standalone="yes"?>
SPOON 允许你通过囑Ş界面来设?/span> ETTL 转换q程Q?/span> Transformation Q。例如,从一?/span> SAP pȝ抽取信息Qƈ把这些信息存储到一个文本文仉的{换Q务如下:
PAN 允许你批量运行由 Spoon 设计?/span> ETL 转换 ( 例如使用一个时间调度器 ) ?/span> Pan 是一个后台执行的E序Q没有图形界面?/span> 惌详细了解 Pan Q请查看 Pan documentation (PDF link).
CHEF 允许你创ZQ务( Job Q?/span> d通过允许每个转换QQ务,脚本{等Q更有利于自动化更新数据仓库的复杂工作。Q务通过允许每个转换QQ务,脚本{等。Q务将会被查,看看是否正确地运行了?/span> ( 下面是一?/span> Chef 的Q务图 )
Job ?/span> Transformation 的差别是Q?/span> Transformation 专注于数据的 ETL Q?/span> Job 的范围比较广Q可以是 Transformation Q也可以?/span> Mail ?/span> SQL ?/span> Shell ?/span> FTP {等Q甚臛_以是另外一?/span> Job ?/span>
KITCHEN 允许你批量用由 Chef 设计的Q?/span> ( 例如使用一个时间调度器 ) ?/span> KITCHEN 也是一个后台运行的E序?/span>
?/span>Web应用的架构来ԌJPivot完全遵@MVCl构Q甚臛_分苛刅Rؓ了减对特定W三Ҏ架的以来Q?/span>JPivot自己实现?/span>MVC框架Q但它可以与其它MVC框架共同使用?/span>
JPivot?/span>Model部分处理Olap的模型定义,查询及结果集Q?/span>JPivot自己定义了一?/span>Olap模型Q然后分别提供了Mondrian?/span>XML/A?/span>JPivot model实现Q这两个实现又通过Adapter?/span>Mondrianpȝ?/span>xml/apȝ交互?/span>
JPivot?/span>View部分比较丰富Q包?/span>JPivot taglib?/span>wfc taglib定义及相关的UI Component助手cR用户可以在自己?/span>JSP中?/span>tag构徏新的视图。与其它Web框架不同的是JPivot在该层次提供了大量的WeblgQ类gJSF那样?/span>
JPivot的控制器部分非常有特艌Ӏ在JPivot中,使用单g模式(Singleton)在每个用LHttpSession中维护唯一一?/span>WcfController对象Q然后以此对象ؓ根,使用Composition模式Q将所有的控gh处理?/span>RequestFilterl织成树形结构?/span>
?/span>JPivot中,所有的UI控g操作都?/span>DispatcherSupport来维护处理该控g?/span>UI交互的一个或多个HandlerQ比如表Cg扩展d的?/span>+”图标的DrillExpandUIcM?/span>dispatcher属性与ExpandHandler内部c)Q而每?/span>UI控g?/span>dispatcher又在其父控g?/span>dispatcher中注册?/span>JPivotҎ客户端操作所h?/span>URL在以WfcController为根?/span>RequestFileter树中查找对应的处理器
JPivot设计模式
在JPivot中用了大量的设计模?Design Patterns)Q本文对q些设计模式实例q行单的介绍。个为通过分析q些实际的系l来学习设计模式所得到的体会还是比较深ȝ?/span>
1. OlapModelcMOlapModelDecoratorcL?/span>Decorator模式Q?/span>JPivotZOlapModelDecorator?/span>OlapModel提供了两U装饰器Q?/span>
OlapModelProxy对在HttpSession中唯一dOlapModel提供了支持,q制了其它对象?/span>OlapModel的初始化与重|操作;增加?/span>OlapModel在改变时通知注册?/span>Listener所发生的改变这一职责?/span>
CachingOlapModel?/span>OlapModel提供了在一定的周期内(Model没有发生改变Ӟ~存Resultl果集的职责?/span>
2. PartBuildercMPartBuilderDecoratorcL?/span>Decorator模式Q具体的装饰器比较多Q但装饰器都是针对特定的Part来装饰的。通过l承q些装饰器,可以为构?/span>Table的各个部分(行、列、单元格、切片)?/span>xmlq行?/span>JPivotl合Apache
DigesterQ我们可以不用修改M现有代码Q仅需实现q些装饰器及对应TableExtensionQƈ在config.xml中注?/font>可以对所生成?/span>Olap Pivot Table?/span>UI表现上进行扩充,q且可以增加或修改对相应的交互操作进行处理的Handler?/span>
3. JPivot使用wfc.tree包对成员及层ơ的树Ş展示q行支持?/span>JPivot定义了一些装饰来增加树Ş控g模型的职责。其中:
?/span>JPivot中,大量使用Observer模式解除视图与模型之间的耦合Q处理两者之间的依赖关系及内容与表示同步?/span>
Modelcd其子c?/span>(JPivot自定?/span>Olap 模型?/span>Mondrian实现?/span>xml/a实现)?/span>ModelChangeListener及其子类Q表根{钻?/span>/旋{/排序排名{、图形、成员树{展C控Ӟ构成Observer模式Q严格的说应该是Listener模式Q,作用是在模型发生改变Ӟ同步更新所有的UI控g展示?/span>
fourheir
, mondrian
, colors
and arrows 4个jsp文g.
<jp:mondrianQuery id="query01" jdbcDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost/foodmart?user=root&password=" catalogUri="/WEB-INF/queries/FoodMart.xml">
Year |
2000 |
2001 |
Growth |
|||
Product |
Dollar sales |
Unit sales |
Dollar sales |
Unit sales |
Dollar sales |
Unit sales |
Total |
$7,073 |
2,693 |
$7,636 |
3,008 |
8% |
12% |
Books |
$2,753 |
824 |
$3,331 |
966 |
21% |
17% |
Fiction |
$1,341 |
424 |
$1,202 |
380 |
-10% |
-10% |
Non-fiction |
$1,412 |
400 |
$2,129 |
586 |
51% |
47% |
Magazines |
$2,753 |
824 |
$2,426 |
766 |
-12% |
-7% |
?Greetings cards |
$1,567 |
1,045 |
$1,879 |
1,276 |
20% |
22% |
从上表可以看到year和Product为dimensions Q维度)Qmeasures ?Unit sales' and 'Dollar sales'?br />
Layers of a Mondrian system
Mondrian OLAP System 包含4个层Q?br />
1、the presentation layer
用于描述最l用h看到的,其表现Ş式有很多Q如Qpivot表、pie、line和bar图、maps和动态图。由用户提问QOLAP服务器返回答案?br /> 2、the dimensional layer
q一层解析、验证和执行MDX 查询Q首先计uQ再计算轴上所有单元的倹{metadata用于描述I间模型Q及I间模型怎样映射到关pL型上?br /> 3、the star layer
它负责维护一个聚合的cacheQaggregation 聚合是一些内存中的测量|cellsQ,及一些维度倹{如果请求的cells不在cache中,则aggregation manager 向the storage layer发出h?br /> 4、and the storage layer
the storage layer为RDBMS?br />
What is MDX?
'multi-dimensional expressions'为Mondrian执行的查询?br /> 下面Z个基本的查询Q?br />SELECT {[Measures].[Unit Sales], [Measures].[Store Sales]} ON COLUMNS,
{[Product].members} ON ROWS
FROM [Sales]
WHERE [Time].[1997].[Q2]
What is a schema?
schema定义了一个多l数据库。它包含一个逻辑模型Q由多个cube、hierarchies、members及一个到物理模型的映组成?br /> 逻辑模型包含Qcubes, dimensions, hierarchies, levels, and members.
例如Q?br /><Schema>
<Cube name="Sales">
<Table name="sales_fact_1997"/>
<Dimension name="Gender" foreignKey="customer_id">
<Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id">
<Table name="customer"/>
<Level name="Gender" column="gender" uniqueMembers="true"/>
</Hierarchy>
</Dimension>
<Dimension name="Time" foreignKey="time_id">
<Hierarchy hasAll="false" primaryKey="time_id">
<Table name="time_by_day"/>
<Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/>
<Level name="Quarter" column="quarter" uniqueMembers="false"/>
<Level name="Month" column="month_of_year" type="Numeric" uniqueMembers="false"/>
</Hierarchy>
</Dimension>
<Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/>
<Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/>
<CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales]-[Measures].[Store Cost]">
<CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/>
</CalculatedMember>
</Cube>
</Schema>
MDX查询为:
SELECT {[Measures].[Unit Sales], [Measures].[Store Sales]} ON COLUMNS,
{[Time].[1997].[Q1].descendants} ON ROWS
FROM [Sales]
WHERE [Gender].[F]
[Time] | [Measures].[Unit Sales] | [Measures].[Store Sales] |
[1997].[Q1] | 0 | 0 |
[1997].[Q1].[Jan] | 0 | 0 |
[1997].[Q1].[Feb] | 0 | 0 |
[1997].[Q1].[Mar] | 0 | 0 |
mondrian.properties
mondrian有一个配|文件可以定义它是如何运行的?br />
a simple star schema
[Sales]
has two measures [Unit sales]
and [Dollar sales]
[Product]
has levels [All Products]
, [Manufacturer]
, [Brand]
, [Prodid]
[Time]
has levels [All Time]
, [Year]
, [Quarter]
, [Month]
, [Day]
[Customer]
has levels [All Customers]
, [State]
, [City]
, [Custid]
[Payment Method]
has levels [All Payment Methods]
, [Payment Method]