蒙德里安4:做好准备!

Mondrian是一种非常流行的开源分析引擎,可用于各种产品(如Pentaho BA Server,JasperSoft BI Server)。Mondrian 4带来了一大堆新功能,其中一些我们将在这篇博客文章中讨论。

条件

  • 您熟悉XML

  • 您熟悉OLAP

  • 您熟悉Linux OS或Mac OS上的命令行。

  • 从这里下载Eclipse IDE for Java EE Developers 。用户不熟悉Java,不用担心,我们不会写单行Java!我们将仅使用Eclipse来创建OLAP架构。

  • 从这里下载Mondai 4版本的Saiku 。我们将使用它来测试模式。请注意,该分支正在积极开发中,不适合生产使用!如果您需要用于生产的版本(目前没有Mondrian 4支持),请从主网站下载。

  • 这篇文章实际上不是一步一步的教程,更多是一种概述,因此建议您拥有一个数据集(理想情况下是数据集市),以便您可以跟随并创建自己的OLAP架构。

  • 我可以在这里下载与此帖相关的所有文件。

什么是新的

  • 现在使用Attributes松散地设置尺寸。它可以是层次结构的一部分,但它们不必。如果在层次结构中定义,它们仍然可以单独使用。

  • MeasureGroups可用于从多个事实表(具有相同的维度和粒度)定义度量。

    • 不再有聚合模式,使用MeasureGroups来定义聚合。

    • 虚拟多维数据集已折旧

  • Schema Workbench已停产。在您选择的文本/ XML编辑器中编写OLAP架构

  • 没有XMLA服务器,分拆项目OLAP4J xmla服务器

  • 内置时间维度生成器

快速概述新语法

我们将很快对新语法进行高级概述。我强烈建议您获取即将出版的Mondrian In Action一书,以获取更详细的说明。此外,如果您不知道XML元素或属性的用途,可以在Mondrian API文档中找到说明。

高水平的结构

请在下面找到OLAP架构定义的简化结构概述:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Schema SYSTEM "mondrian.dtd" >
<Schema metamodelVersion="4.0"><!-- Define how the DB tables are set up --><PhysicalSchema><!-- Specify source tables --><Table/><!-- Define relationships between snowflake or alias tables, not direct dim tables! --><Link/></PhysicalSchema><!-- Create your cube definition and reference back to the physical schema --><Cube><!-- Define dimensions and attributes --><Dimensions><Dimension><Attribute/></Dimension><Hierarchies><Hierarchy><Level/></Hierarchy></Hierarchies></Dimensions><!-- Define Measures --><MeasureGroups><MeasureGroup><Measures><Measure/></Measures><DimensionLinks><ForeignKeyLink/><FactLink/></DimensionLinks></MeasureGroup></MeasureGroups><!-- Define Calculated Members and Names Sets --><CalculatedMembers/><NamedSets/></Cube><!-- If you have conformed dimensions, specify them globally.--><Dimension><!-- Define roles below to restrict access to the cube(s). --><Role>
</Schema>

请注意,Mondrian 4对您提到这些构建块的顺序不敏感,因此您可以在示例中的物理模式之前提及该多维数据集。

如何定义物理架构

物理模式定义了数据库表的设置方式:

<PhysicalSchema><Table name='employee'><Key><Column name='employee_id'/></Key></Table><Table name='store'><Key><Column name='store_id'/></Key></Table><Link source='store' target='employee'><ForeignKey><Column name='store_id'/></ForeignKey></Link>
…
</PhysicalSchema>

注意:<Link>元素仅用于描述与别名表或雪花表的关系(因此,与事实表相距多个链接的表)。

如何定义尺寸

使用<Dimension>元素定义维度,使用<Attribute>元素定义其成员。默认情况下,Mondrian将为您创建的每个属性创建一个层次结构,除非您指定<Attribute hasHierarchy =“false”>。有一个可选的<Hiearchy>元素,用于指定多级层次结构。

<Dimension name='Promotion' table='promotion' key='Promotion Id'><Attributes><Attribute name='Promotion Id' keyColumn='promotion_id' hasHierarchy='false'/><Attribute name='Promotion Name' keyColumn='promotion_name' hasHierarchy='false'/><Attribute name='Media Type' keyColumn='media_type' hierarchyAllMemberName='All Media' hasHierarchy='false'/></Attributes><Hierarchies><Hierarchy name='Media Type' allMemberName='All Media'><Level attribute='Media Type'/></Hierarchy><Hierarchy name='Promotions' allMemberName='All Promotions'><Level attribute='Promotion Name'/></Hierarchy></Hierarchies></Dimension>

Mondrian 4的一大优势是,即使它们属于多级层次结构,您现在也可以自己使用属性!

如何定义措施

使用<MeasureGroup>元素定义度量。在<DimensionLinks>元素中,您可以为与此MeasureGroup相关的所有维度定义外键:

<MeasureGroups><MeasureGroup name='Sales' table='sales_fact_1997'><Measures><Measure name='Unit Sales' column='unit_sales' aggregator='sum' formatString='Standard'/><Measure name='Store Cost' column='store_cost' aggregator='sum' formatString='#,###.00'/><Measure name='Store Sales' column='store_sales' aggregator='sum' formatString='#,###.00'/><Measure name='Sales Count' column='product_id' aggregator='count' formatString='#,###'/><Measure name='Customer Count' column='customer_id' aggregator='distinct-count' formatString='#,###'/><Measure name='Promotion Sales' column='promotion_sales' aggregator='sum' formatString='#,###.00' datatype='Numeric'/></Measures><DimensionLinks><ForeignKeyLink dimension='Store' foreignKeyColumn='store_id'/><ForeignKeyLink dimension='Time' foreignKeyColumn='time_id'/><ForeignKeyLink dimension='Product' foreignKeyColumn='product_id'/><ForeignKeyLink dimension='Promotion' foreignKeyColumn='promotion_id'/><ForeignKeyLink dimension='Customer' foreignKeyColumn='customer_id'/></DimensionLinks></MeasureGroup>
</MeasureGroups>

如何定义聚合表

在以前的版本中,配置聚合表对于许多用户来说是一个混乱的区域。值得庆幸的是,随着Mondrian 4的到来,大大简化了这一点。现在,聚合表可以在<PhysicalSchema>内的OLAP模式中直接引用,并在<MeasureGroup>元素内正确定义。

<PhysicalSchema>…
<Table name='agg_c_special_sales_fact_1997'/>
<Table name='agg_pl_01_sales_fact_1997'/>
<Table name='agg_l_05_sales_fact_1997'/>
<Table name='agg_g_ms_pcat_sales_fact_1997'/>
<Table name='agg_c_14_sales_fact_1997'/>
</PhysicalSchema>
…
<MeasureGroups>…<MeasureGroup table='agg_c_special_sales_fact_1997' type='aggregate'><Measures><MeasureRef name='Fact Count' aggColumn='fact_count'/><MeasureRef name='Unit Sales' aggColumn='unit_sales_sum'/><MeasureRef name='Store Cost' aggColumn='store_cost_sum'/><MeasureRef name='Store Sales' aggColumn='store_sales_sum'/></Measures><DimensionLinks><ForeignKeyLink dimension='Store' foreignKeyColumn='store_id'/><ForeignKeyLink dimension='Product' foreignKeyColumn='product_id'/><ForeignKeyLink dimension='Promotion' foreignKeyColumn='promotion_id'/><ForeignKeyLink dimension='Customer' foreignKeyColumn='customer_id'/><CopyLink dimension='Time' attribute='Month'><Column aggColumn='time_year' table='time_by_day' name='the_year'/><Column aggColumn='time_quarter' table='time_by_day' name='quarter'/><Column aggColumn='time_month' table='time_by_day' name='month_of_year'/></CopyLink></DimensionLinks></MeasureGroup>
</MeasureGroups>

在Eclipse中创建OLAP架构

您可以在任何文本编辑器,XML编辑器或IDE中创建Mondrian OLAP架构。Eclipse是一个非常流行的IDE,在这里将作为一个例子。

我创建了一个基于Mondrian lib文件夹(链接到原始Mondrian 4 DTD)中的DTD文件的XSD ,以便能够验证XML文件(实际的OLAP模式)。目前,这个DTD不适合验证OLAP架构XML文档(Julian指出他为架构添加了多个继承。他创建了这个JIRA案例来解决这个问题)。所以,我基本上做了,这是一个非常快速的解决方案,是通过转换输出一个XSD运行DTD然后我很快修复了我遇到的一些问题。我针对我的一个XML文件测试了这个XSD,而对于运行良好的Foodmart测试了这个XSD。我确信此架构(XSD)需要更多工作,因此请使用此帖子上的评论功能向我报告您遇到的任何问题。

在这里下载我的Mondrian XSD版本mondria4.xsd 。

请不要混淆:XSD(X ML S chema D efinition的缩写)是一个定义XML文档结构的文件。XSD是DTD(D ocument T ype D efinition)的继承者,并且更强大。在我们的案例中,XML文档(我们将基于此XSD创建)恰好称为Mondrian OLAP Schema(我将尝试将其称为XML文件)。
打开Eclipse并创建一个名为Mondrian4Schema 的新项目(而不是Java项目)。将XSD文件直接放在项目文件夹中。创建XML文件的最简单方法是右键单击XSD文件,然后选择Generate> XML File:

接下来指定Root元素,在我们的例子中是Schema :

将为您创建一个基本的XML结构。熟悉XML的人可能希望直接跳转到源视图并开始在那里工作。

对于不熟悉XML的人,只需右键单击节点,即可使用“ 大纲” 面板添加元素和属性:

在将xml文件上载到服务器之前,您应该验证它。右键单击xml文件,然后选择Validate :

注意:此验证仅检查XML文件是否与XSD文件中的结构定义匹配。因此,它不会检查您是否引用了正确的表,如果关系是正确的等等。我们可以将其称为第一次检查。第二项检查将是了解xml文件在逻辑上是否正确 - 这将通过在Mondrian上运行它(即通过Saiku)并分析错误消息(如果有的话)来完成。然后进行第三次检查,看看数据是否正确/尺寸和测量是否符合预期 - 通过像Saiku这样的图形界面进行测试。

在Eclipse中使用XML模板

为了让您的生活更轻松,请根据模板启动OLAP架构。我创建了一个模板,您可以在此处下载并用于以下步骤。您也可以创建自己的。

请注意,示例模板要求XSD文件与您创建的xml文件位于同一文件夹中。您可以通过指向公共XSD轻松避免此依赖关系。

复制模板文件的内容。

转到Preferences  并选择XML> XML Files> Editor> Templates ,然后单击New :

提供名称和描述。将Context 设置为New XML 并将模板的内容粘贴到Pattern中:

单击完成。

现在,当您创建新的XML文件时,可以从XML模板中选择Create XML file :

然后您可以选择我们之前设置的模板:

使用模板应该可以节省很多时间,不熟悉Mondrian模式的用户将有一个更容易的入口点。

如何将OLAP架构上载到BI Server

Schema Workbench具有将XML文件上载到BI Server的非常有用的选项。现在有很多替代方案......你也可以使用Filezilla或类似的FTP客户端将文件上传到远程服务器。稍后,我将向您展示如何将XML文件直接从Eclipse导出到本地Web服务器。

在本地使用Saiku测试Mondrian 4 Schema

设置Saiku

Mondrian 4版本的当前下载位置(2013-01-14):http:
//ci.analytical-labs.com/job/saiku-mondrian4/

如果您安装了Pentaho BI Server,那么您只需下载该插件即可。否则,如果您想拥有独立版本,请下载Saiku Server。

以下说明适用于独立的Saiku服务器:
如果您不熟悉Saiku服务器,请阅读此简短介绍。

我解压缩了我的主文件夹中的文件。让我们准备好并启动服务器:

cd~ / saiku-server
chmod -R 700 * .sh
sh ./start-saiku.sh

等待一分钟左右,直到服务器准备就绪,然后检查您是否可以在浏览器中访问它:

http:// localhost:8080
用户名:admin
密码:admin

如果可以访问Web界面,请执行以下步骤:

将Mondrian XML文件导出到本地测试服务器

我们本可以在Eclipse中创建一个Dynamic Web Project并将其部署在服务器上,但这可能有点过于雄心勃勃。从我们的Eclipse项目导出到服务器的xml文件非常简单。

首先让我们在服务器上创建一个文件夹。目前为所有Saiku演示文件设置了一个文件夹 - 为简单起见,我们将使用这个文件夹:
cd~ / saiku-server / tomcat / webapps / saiku
mkdir supplierChain

在Eclipse中,右键单击Mondrian xml文件,选择出口:

接着选择General> File System ,然后单击Next :

定义要从哪个项目导出的文件并定义目标文件夹:

并单击Finish(完成)。现在,您在本地服务器上有一份文件副本。

配置Saiku

按照此处所述配置数据源。如有必要,请按此处所述添加JDBC驱动程序。在我的例子中,这归结为以下(作为一个例子,我的数据库表驻留在我的本地MySQL数据库上,我创建了一个名为supplierChain.mondrian.xml的Mondrian模式):

cd ~/saiku-server/tomcat/webapps/saiku/WEB-INF/classes/saiku-datasources
cp foodmart supplierChain
vi supplierChain

将文件的内容更改为:

type = OLAP
name = supplierChain
driver = mondrian.olap4j.MondrianOlap4jDriver
location = jdbc:mondrian:Jdbc = jdbc:mysql:// localhost / datamart_demo; Catalog = .. / webapps / saiku / supplierChain / supplierChain.mondrian.xml; JdbcDrivers = com.mysql.jdbc.Driver;
username = root
password =

保存并关闭。

注意:在我的下载中,Saiku Server已经包含了MySQL JDBC jar,因此下一节只是概述,以防您需要添加任何其他驱动程序

接下来从这里下载JDBC MySQL驱动程序。

cd ~/saiku-server/tomcat/webapps/saiku/WEB-INF/lib/
cp ~/Downloads/mysql-connector-java-5.1.22/mysql-connector-java-5.1.18-bin.jar .

好,易于。

重新启动Saiku并检查您是否可以在Web界面中看到架构:

如果您遇到问题,请查看服务器日志:
vi~ / saiku-server / tomcat / logs / catalina.out
按SHIFT + G直接转到文件末尾,然后开始向上滚动并继续寻找人类可读的错误消息。注意新用户:会有很多神秘的线条...只是忽略它们......在某些时候你应该找到一些有意义的东西(如果有错误的话)。
或者如果你想继续观察日志:
tail -f~ / saiku-server / tomcat / logs / catalina.out
如果你的OLAP架构有问题,你应该在那里找到一些提示。

通过阅读博客可以找到哪些错误示例:我的新OLAP架构未显示在Web界面中,因此我分析了日志并找到以下行:

正如您所看到的,它在这里说“ 数据库中不存在” 表'dim_customers'。(在表中)(在第27行,第4列)“,这意味着我在XML文件中指定的表名必须是错误的。做一次双重检查我意识到,该表实际上名为dim_customer。所以我回到Eclipse,纠正这个错误,重新上传文件并再次刷新缓存...现在我的架构出现了。

如果您对Schema进行了更改并再次将其导出到服务器,则只需单击Web界面中的Refresh按钮即可刷新Saiku服务器现金:

现在我们可以完成检查的最后一部分:分析维度和度量是否按预期运行,并且我们已经在路上,我们还检查数据是否正确。我们通过在GUI中使用维度和度量来执行所有这些操作,并运行一些SQL查询来交叉检查结果:

如何在Saiku上启用Mondrian MDX和SQL日志记录

在某些测试场景中,您可能对Mondrian生成的SQL感兴趣。要启用此类日志记录,请在~saiku-server / tomcat / webapps / saiku / WEB-INF / classes中编辑log4j.xml 文件

取消注释专门针对Mondrian SQL语句的标题特殊日志文件正下方的最后一部分。如果要记录已提交的MDX语句,请取消注释上面的部分(专门针对Mondrian MDX语句的特殊日志文件)。保存文件。

然后重启服务器。

然后,您会发现在〜/赛酷服务器/ tomcat的/日志两个新的日志文件:
mondrian_sql.log
mondrian_mdx.log

例如,如果您在Saiku上使用花哨的MDX模式功能,它允许您编写和执行您自己的MDX查询,您可以通过在终端中运行此命令来遵循由Mondrian生成的SQL:
tail -f~saiku-服务器/ tomcat的/日志/ mondrian_sql.log

参考网站:http://diethardsteiner.blogspot.com/2013/01/mondrian-4-get-ready.html

Mondrian 4: Get ready!相关推荐

  1. $(function(){})、$(document).ready(function(){})....../ ready和onload的区别

    1.window.onload 当一个文档完全下载到浏览器中时,会触发 window.onload 事件. 这意味着页面上的全部元素对 javascript 而言都是可以访问的,这种情况对编写功能性的 ...

  2. jQuery中的页面载入($()、ready(fn)、onload)

    用jQuery进行页面载入时有集中方式,我们通过例子来说明一下: 第一种(通过window.onload()): <!DOCTYPE html> <html><head& ...

  3. jquery $.proxy使用 Jquery实现ready()的源码

    jquery $.proxy使用 在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: 1 //正常的this使用2 $('#myElement').cl ...

  4. $(document).ready(function() {})不执行的问题

    今天发现一个页面始终不执行初始化脚本,代码如下: <script type="text/javascript" src="Script/jquery-1.11.1. ...

  5. jquery源码解析:pushStack,end,ready,eq详解

    上一篇主要讲解了jQuery原型中最重要的方法init.接下来再讲一些比较常用的原型方法和属性 core_slice = [].slice, jQuery.fn = jQuery.prototype ...

  6. $(window).load(function() {})和$(document).ready(function(){})的区别

    在我以前的开发中,一般用到javascript,我都是采用jquery的模式,也就是大多数时候,第一行写的是: $(document).ready(function(){ ... }); 这个时候,不 ...

  7. 请指出document load和document ready的区别?

    共同点:这两种事件都代表的是页面文档加载时触发. 异同点: ready 事件的触发,表示文档结构已经加载完成(不包含图片等非文字媒体文件). onload 事件的触发,表示页面包含图片等文件在内的所有 ...

  8. $(document).ready()和window.onload的区别

    来源于: The window.onload event fires when a document is completely downloaded to the browser. This mea ...

  9. jquery ready 与资源加载顺序

    虽然jquery已经失去了统治前端开发的地位,但是依然有其适用性. 很久以前就知道,js文件要放在页面的底部加载. 一则,让css尽快加载,把完整的页面呈现给用户. 二则,有时候js需要操作DOM,需 ...

最新文章

  1. 中科院学生经常看的几个公众号
  2. mq 自动消费 php,php – 从RabbitMq消费不确认消息
  3. atitit. java jsoup html table的读取解析 总结
  4. css3圆形轨迹动画
  5. Oracle 如何设置shared pool 和sga大细, 应该设置几大
  6. 如何订阅MVP on dot NET(或其它播客) - iTunes版
  7. C中不安全的函数以解决办法汇总
  8. python把某列改为日期格式_如何更改整列的日期格式?
  9. [Springboot]SpringCache + Redis实现数据缓存
  10. 把lighttpd配置为系统服务
  11. 适合独自一人宅在家必追十部影片推荐下载观看
  12. 华东师范大学《模式识别与机器学习》试题
  13. 提示msvcr71.dll丢失处理办法
  14. CVPR2019 | 论文分类汇总
  15. windows7操作系统安装步骤(精简版)
  16. sqlserver笔记
  17. servu ip段访问_高防IP是如何防御DDOS/CC攻击的,防御原理是什么?
  18. JavaSE06-集合
  19. 谷粒商城--SPU和SKU(属性分组、规格参数、销售属性)
  20. 腾讯云SDK使用python版

热门文章

  1. mac安装配置zsh
  2. C# 20行代码解析KRC歌词内容
  3. 易语言微凉模块oracle,穿透框架全智能填表微凉网页填表模块及源码
  4. arduino烧录esp8266出错:error: espcomm_upload_mem failed
  5. Cly的三角形 (思维+斐波那契)
  6. PDF工具箱-分割提取合并
  7. 200604013个人日志(摘录一些厦门集美区教育局06年招人的信息)
  8. erdas图像增强步骤_ERDAS图像增强处理.ppt
  9. 剑走偏锋之ICMP隧道
  10. 【华为OD机试真题 JAVA】跳格子游戏