这一章涵盖了以下内容:
- 基于数据库的报表的复杂性
- OLAP(联机分析处理)报表工具的优势
- 使用Mondrian的原因
业务分析是一种基于历史数据分析的流程,用于获得对业务绩效的洞察。传统上,用于业务分析的工具费用昂贵且难以维护。而Mondrian,相反,是一款开源的业务分析工具,使任何规模的组织能够为业务用户提供数据以进行交互式分析,并创建报表,无需IT或数据库管理员的帮助。一旦数据设置好,用户可以直接与之交互。本书将为您介绍如何使用Mondrian的概念和技术知识,包括如何组织数据以便轻松访问,如何安全地提供您的数据,以及如何将这些数据集成到其他应用程序中。
这第一章将向您介绍采用基于报表方法进行分析所遇到的一些常见问题。我们将向您展示创建数据库报表所涉及的复杂性,以及为何它们不适合进行分析。然后,我们将演示如何使用Mondrian来克服这些挑战,并解释一些使Mondrian成为理想选择的功能。最后,我们将提供对本书其余部分的概述,我们将深入探讨有关Mondrian的各个方面,并教您如何有效地使用Mondrian进行分析。
1.1 业务分析的需求
在迈克尔·刘易斯的书《金球》中,他讲述了奥克兰体育甲队如何成功地以职业棒球中最低的预算之一组建了一支高度有天赋和竞争力的球队。在此之前,球探通过观察球员并根据谁将成为职业球员的直觉进行球员招聘。随着招募球员的成本飙升,签错球员的错误成本也随之飙升。奥克兰体育甲队的总经理比利·比恩决定需要一种更加分析的方法。他引入了分析师,他们研究了大学球员的统计数据,识别出了潜力较大但由于各种原因被球探忽略的球员。统计数据,比如上垒率和每个打席的四坏球数量,变成了重要的考虑因素,而这些在以前并不被认为重要。这使得奥克兰在选秀方面占据了优势,其他球队没有意识到这些球员的价值,并以较低的价格签约。
与奥克兰一样,今天的企业需要能够优化支出以最大化投资回报。控制诸如库存成本、浪费、过多的设备或劳动力以及退货等业务方面,已经不再是可选的,而是在竞争激烈且以智能为驱动的市场中生存的必备条件。而企业需要良好的工具和流程来实现这一目标。奥克兰大部分时间都是自己编写软件,但这种方法通常成本高、速度慢且风险较大。而有了Mondrian,任何组织都可以使用世界级的分析工具,可以在最小的成本和风险下快速投入运营。
历史上,对业务的分析和管理是通过电子表格、操作数据库和报表来完成的。尽管这些方法适用于查看预定义的数据格式,但对于探索和发现新信息来说并不那么合适,因为报表通常难以创建和操作,需要耗费大量时间。联机分析处理(OLAP)是一项技术,它提供了足够结构化的业务数据,使业务用户能够轻松探索数据,并发现重要的数据关系,而无需了解数据库查询语言或公司操作数据库的组织结构。
以下是一些公司可以通过OLAP工具进行的发现类型以及这些发现如何帮助他们的业务:
- 发现特定产品在夏季需求旺季非常高,而在其他季节需求较低。公司现在可以季节性地调整库存,以避免 过多的存储成本。
- 发现在不同出版物上发布广告后,服务需求发生变化。公司现在可以在启动新广告活动时,协调广告和员 工配置,以满足需求而无需过度雇佣。
- 揭示访问网站的访客的性别和年龄在不同的日期和时间有所不同。这一信息允许网站根据日期和时间调整 内容以反映不同的人口统计数据。
- 确定网站需求的高峰时间和程度。公司现在可以根据如何在不添加过多静态容量的情况下满足典型需求的 能力做出明智的决策。
理解公司的数据需要工具,允许用户组织和探索数据并发现有趣的事实。Mondrian是这样一组工具的引擎。
Mondrian是一个开源的OLAP引擎,以对用户来说直观的方式提供数据访问。作为一个引擎,Mondrian可以在Web容器中运行,比如Tomcat或JBoss,也可以嵌入到应用程序中。Mondrian只需要可选的配置、定义数据逻辑结构的Schema以及用数据填充的数据库。Mondrian可以与支持Java数据库连接的大多数数据库一起使用。 图1.1显示了Mondrian在典型部署中如何在分析中发挥作用。Mondrian位于数据之间,使用数据的逻辑描述为分析工具和仪表板提供数据。用户根据数据属性图形化地探索数据,而不是通过复杂的查询。Mondrian动态地将其转换为底层数据库查询格式,以以逻辑准确的方式提供数据。
1.2 用在线分析处理(OLAP)替代静态报表
企业依赖数据,而这些数据通常以报表的形式呈现给用户。传统报表是静态的,通常很长,其中重要的数据嵌入在大量不那么重要的数据中。用户通常也无法理解数据背后的细节。他们也无法深入了解底层细节或相关数据。
通过现代在线报表,许多这些挑战已经被克服,允许用户通过筛选数据并创建到其他报表的链接来减少数据。但是这些报表仍然缺乏进行真正分析的灵活性,如许多用户将报表导出到Excel进行进一步操作所证明的那样。本节将以一个公司为例,该公司正在应对报表带来的压力,并遇到了这类系统经常出现的问题。在下一节中,我们将看看如何应用现代分析来克服这些问题,并为需要信息来做决策的用户提供权力。
Adventure Works是一家销售自行车零部件和设备的公司。他们的分析师的工作是提供帮助业务用户管理业务和最大化利润的业务报表。他花费大部分时间来探索从各种业务交易中收集的数据。
也许您在其他地方见过Adventure Works?如果您曾经使用其他分析系统,特别是Microsoft Analysis Services (MSAS),那么您可能之前遇到过Adventure Works数据库。MSAS一直是业务分析的领导者,而微软一直引领技术和标准,特别是多维表达式(MDX)。Mondrian也努力遵守这些标准,因此我们认为使用微软提供的相同数据示例是有道理的。请注意,我们在原始Adventure Works数据库的基础上进行了扩展,因此数据仓库可能与微软的略有不同。
该分析师与数据库管理员密切合作,以了解数据库的结构,以便为报表收集数据。当需要新报表时,如果查询容易,他将创建数据库查询,否则将与更有经验的数据库专家合作。然后,他将基于数据构建报表。如果业务用户喜欢报表,它将投入生产,但更常见的情况是,用户需要进行小的更改,分析师必须重新调整报表。正确地获得一个报表可能需要数天的时间,然后用户通常会想要不同的报表。
该分析师的用户还要求各种报表,使他们能够查看多个层次的数据并将不同类型的数据进行比较。这意味着分析师必须创建包含本质上相同数据的不同详细级别的多个报表的副本。用户还希望能够限制数据,并具有点击并查看数据更详细信息的能力。
图1.2显示了高级管理层用于查看每个城市总订单报表的一部分。这让管理层了解哪些国家和城市有最大的订单。
以下显示了用于生成报表的数据库查询。请注意,这需要了解具有数据的源表,如何连接这六个表以及SQL语法。
SELECT
`salesorderdetail`.`OrderQty`,
`salesorderdetail`.`UnitPrice`,
`stateprovince`.`Name`,
`stateprovince`.`CountryRegionCode`,
`address`.`City`
FROM
`salesorderheader`
INNER JOIN `salesorderdetail`
ON `salesorderheader`.`SalesOrderID` =
`salesorderdetail`.`SalesOrderID`
INNER JOIN `customer`
ON `salesorderheader`.`CustomerID` =
`customer`.`CustomerID`
INNER JOIN `customeraddress`
ON `customer`.`CustomerID` =
`customeraddress`.`CustomerID`
INNER JOIN `address`
ON `customeraddress`.`AddressID` =
`address`.`AddressID`
INNER JOIN `stateprovince`
ON `address`.`StateProvinceID` =
`stateprovince`.`StateProvinceID`
GROUP BY
`address`.`City`
ORDER BY
`stateprovince`.`CountryRegionCode` ASC,
`stateprovince`.`Name` ASC,
`address`.`City` ASC
图1.3显示了面向国家和州级管理层的更详细报表的一部分,显示了每个州或省的重要客户是谁。
以下显示了此报表的修改后的数据库查询。同样,分析师必须了解数据库的详细结构才能获取数据。要对报表进行任何更改,都必须创建新的查询和新的报表。
SELECT
address
.City
,
contact
.FirstName
,
contact
.LastName
,
salesorderdetail
.OrderQty
,
salesorderdetail
.UnitPrice
,
customeraddress
.CustomerID
,
customer
.TerritoryID
,
stateprovince
.Name
,
stateprovince
.CountryRegionCode
FROM
address
INNER JOIN customeraddress
ON address
.AddressID
=
customeraddress
.AddressID
INNER JOIN customer
ON customeraddress
.CustomerID
=
customer
.CustomerID
INNER JOIN salesorderheader
ON customer
.CustomerID
=
salesorderheader
.CustomerID
INNER JOIN salesorderdetail
ON salesorderheader
.SalesOrderID
=
salesorderdetail
.SalesOrderID
INNER JOIN contact
ON salesorderheader
.ContactID
=
contact
.ContactID
INNER JOIN stateprovince
ON address
.StateProvinceID
=
stateprovince
.StateProvinceID
GROUP BY
customeraddress
.CustomerID
ORDER BY
customer
.TerritoryID
ASC,
address
.StateProvinceID
ASC,
address
.City
ASC,
contact
.LastName
ASC,
stateprovince
.Name
ASC
最近,对于新报表和更改的请求已经开始变得无法应付。Adventure Works的分析师无法跟上这些请求,工作时间变得很长。沮丧的业务用户已经开始从IT部门获取数据并在Excel中进行分析,但数据并不总是最新的,而且很难从多个角度查看。除了对报表的请求,分析师现在还接到了帮助用户在Excel中操作其数据的电话。
在完成了一个特别复杂的多表连接查询并在夜间运行的报表后,分析师来上班发现一个愤怒的数据库管理员在等待着他。显然,该报表减缓了操作数据库的速度,并导致了向客户发货的延迟。
高级管理人员对他们的报表感到满意,他们希望与区域和商店经理分享这些报表,但他们只想让这些经理看到与他们相关的数据。他们要求为每个经理定制报表。图1.4显示了美国区域经理的报表。看起来未来需要花费相当多的时间来创建所有这些报表。
随着报表数量的增加和用户数量的增长,系统开始变得迟缓,报表渲染需要很长时间。这让业务用户感到沮丧,因为他们花费更多时间等待报表而不是分析数据。
如果分析师想要保持理智,而业务用户想要保持满意,那么需要有一种更好的分析方法。幸运的是,他一直保持着分析技术的最新水平,并意识到一个开源的OLAP工具,Mondrian,可以帮助他摆脱这一危机。这将让业务用户能够快速而安全地进行自己的分析,这应该有助于改善企业的绩效以及他自己的职业发展。
1.3 OLAP 来拯救
Adventure Works 希望有一个解决方案,让用户能够进行自己的分析,而无需等待创建报表或需要用户咨询数据库管理员。他们还需要一个低成本的解决方案,前期风险最小。最后,无论他们选择什么,都必须快速,以便用户可以在几分钟内进行分析,而不是几天。
有许多OLAP工具可供选择,但他们选择Mondrian,原因如下:
- Mondrian支持用户驱动的分析。用户能够在不需要管理员或报表编写人员的大量帮助下进行自己的分析。
- Mondrian是低成本、低风险的选择。Mondrian是开源的,可以免费下载。Mondrian还捆绑了许多分析工具和套件,使其易于安装和开始使用。
- Mondrian速度快。它具有各种优化技术,使用户能够使用交互式工具以思维的速度进行分析。
- Mondrian具有内置的安全功能,非常适合具有敏感数据的组织。
- Mondrian基于开放标准。它可以运行在各种应用服务器上,并与大多数主要数据库兼容。这意味着Mondrian不会将您锁定在专有解决方案中。
本节的其余部分将详细介绍Mondrian的一些优势以及它如何解决Adventure Works等组织面临的问题。
1.3.1 Mondrian让用户驱动分析
Mondrian通过消除需要数据库管理员和查询编写人员来提取数据的需求,解决了与基于报表的分析相关的许多问题。在后面的章节中,我们将向您展示如何组织数据并使其易于分析师使用。一旦完成了这个步骤,用户就可以使用图形工具访问数据。他们不再需要了解数据的复杂性,可以将时间花在分析和发现可能改进业务的内容上。
在Mondrian中,数据是通过属性来组织的,比如位置和时间,这样您可以提出问题,比如“2011年北美所有产品线的销售额增加了多少?”在OLAP术语中,这些数据属性称为维度。多个用户界面提供了通过这些维度查看数据的拖放能力。您不需要了解任何查询语言。
关于为什么使用Pentaho:本书在示例中大量使用Pentaho。这是因为Pentaho是Mondrian的主要支持者,并已将其嵌入到其业务分析服务器中。尽管Mondrian被许多其他系统使用,但Pentaho是最常见的。
图1.5显示了Pentaho Analyzer视图,它允许业务智能(BI)用户将对象拖动到画布上。无需了解数据库的结构或使用查询语言进行分析。
在维度中,数据可以按级别查看,比如按城市、国家或地区的销售额。这使您可以查看您感兴趣的级别的数据,因此国家经理可以查看国家级别的数据,而区域经理可以查看区域级别的数据。
图1.6显示了在画布上拖动Country、State、Quantity Ordered、Price Each、Total和Year字段创建的州级订单的情况。随着每个字段放置到画布上,数据会自动更新。
图1.7显示了相同的分析,但在更详细的级别。在这种情况下,用户将额外的字段City和Customer拖动到报表中。这个版本可以在几秒或几分钟内提供更详细的信息,而不需要创建不同的查询或物理报表。
您可以轻松使用筛选器来限制数据,仅显示基于某种规则的数据,例如值、字符串文本等等。Mondrian支持所有维度和值上的筛选器,以及特殊筛选器,如前10和字符串模式匹配。这使您能够根据自己的需求定制分析,而不是需要查看包含大量额外数据的长报表。
图1.8显示了用户将报表筛选为仅包含英国和美国以及2004年的情况。分析师能够专注于与之相关的信息,而无需查询编写人员为每个用户创建单独的报表。
1.3.2 Mondrian是低成本、低风险的解决方案
Mondrian是一个任何人都可以下载和构建的开源项目。与使用该工具相关的没有许可费用或其他成本,这使Mondrian成为分析的低风险选择。因为Mondrian是一个引擎,您还需要一个服务器来托管它。幸运的是,Mondrian可以在各种服务器上运行,包括独立模式和流行的业务分析服务器。其中最流行的是Pentaho,这是一个开源的业务分析套件,有一个您可以免费使用的社区版。Mondrian嵌入在服务器中,作为拖放工具的引擎,使用户可以轻松进行分析。
图1.1展示了Mondrian如何作为分析的引擎。图1.9显示了业务用户的分析请求是如何由Mondrian处理的。
- 业务用户决定使用多种不同的前端界面查询一些数据,通常是一个轻量级客户端界面,比如Pentaho Analyzer。
- 界面使用Multidimensional Expressions (MDX) 查询创建查询,可以通过Web服务调用或直接API调用来生成。MDX是一种用于分析的标准化通用查询语言,由大多数分析引擎支持。MDX的优点是简化了对数据库的调用,同时也非常强大。它还是一种通用的方言,可以在不同数据库中使用。一些用户界面允许用户直接输入或修改MDX查询,使熟悉MDX语法的用户可以执行更复杂的查询并使用MDX中提供的许多函数。
- Mondrian使用逻辑Schema,将其组织成维度(关于数据的属性,如日期和位置)和度量(实际数据事实,如成本、库存水平等)的立方体。该Schema还提供了性能优化和安全性的功能。Mondrian使用此Schema从内存缓存中检索数据或生成优化的数据库调用。Mondrian会自动生成适用于多种数据库的正确SQL语句。
- Mondrian根据元数据描述生成SQL查询,并发出数据库请求。
- 数据库将数据结果集返回给Mondrian。
- Mondrian使用可视化工具理解的标准API将数据返回给用户界面。
- 最后,数据以易于理解和操作的表格格式以图形方式格式化显示给用户。
整个过程通常只需要几秒钟,因此业务用户能够在单个分析会话中探索各种不同的选择。此外,如果您将Mondrian作为Pentaho BI套件的一部分使用,您可以将Mondrian用作Pentaho报表、企业仪表板和Pentaho Analyzer中的轻量级客户端前端的数据源。这使Mondrian成为各种用户友好界面的非常灵活的引擎,同时还为开发人员提供了标准的数据接口。
关于Mondrian的MDX:虽然Mondrian努力使其与Microsoft的MDX版本兼容,但存在一些细微的差异。请查看Mondrian网站以获取最新的差异列表:http://mondrian.pentaho.com/documentation/mdx.php。
1.3.3 Mondrian 速度快
Mondrian被设计为运行迅速。OLAP数据库的结构旨在在处理大型数据集上进行计算时获得高性能,并且分析变化可以在几秒钟内显示出来。此外,Mondrian利用了一些优化技术,如内存中计算的存储,以进一步提高速度。而且由于Mondrian可以嵌入到Web应用程序中,因此可以轻松地扩展供数百或数千用户使用。
尽管性能提升根据数据仓库的结构而有显著差异,但使用聚合表和内存缓存可以显著提高性能。例如,一个用户有一个包含数亿行和8个维度表的事实表,其中最多有2500万行。直接使用SQL运行报表每个报表需要约10分钟。添加Mondrian并进行聚合后,时间降至8秒左右。通过缓存的使用,这些查询平均降至2.4秒。图1.10说明了使用Mondrian可以取得的显著性能提升(在此示例中,使用Mondrian快了100多倍)。
由于Mondrian速度快,它使分析师能够执行使用SQL非常困难或缓慢的高级分析。例如,Mondrian具有允许分析师执行线性回归或比较不同时期绩效的功能。它会自动在所需级别执行计算,而无需编写不同的查询或程序。这使Mondrian成为高级分析的理想解决方案。
快速的结果对于交互式分析至关重要。速度使分析师能够以多种方式探索数据并发现有关业务的信息,例如高销售产品线、仓库的库存问题以及哪些网络营销策略有效。在后面的章节中,我们将向您展示如何为最大性能组织数据。我们还将向您展示如何配置Mondrian以使用聚合表和缓存以进一步提高性能。
1.3.4 Mondrian是安全的
除了性能之外,企业在处理企业数据时还有其他考虑因素,如限制特定用户的访问权限,并支持具有多个客户的租户环境。Mondrian使用基于角色的方法来限制数据访问。
基于角色的安全性意味着数据是基于与用户关联的角色而受限制的。例如,人力资源经理可能可以访问与员工相关的敏感信息,这些信息不应与其他员工共享。财务经理需要了解成本,但库存经理只需要知道库存水平。通过为每种不同类型的用户分配唯一的角色,Mondrian可以拥有一个单一的分析数据库,但只显示每个用户所需的数据。分析和报表工具将只获取适用于特定用户的数据,因此您不需要为不同角色单独创建报表,仅仅是为了限制数据。
在安全性的章节中,我们将向您展示如何应用角色以限制对敏感数据的访问。我们还将向您展示一些高级方法,您可以使用这些方法来使角色动态化,并在多客户的环境中分离数据,为每个客户保护其数据。后者对于不仅仅想在内部使用分析,而且还想将分析暴露给外部客户的组织非常有用。
由于Mondrian是基于开放技术标准构建的,例如Java和Web服务,因此它可以在各种平台上运行,并包括在桌面客户端和轻客户端中。这使得将Mondrian和OLAP的好处传播给全球用户变得容易。这还意味着Mondrian用户不受限于任何特定的硬件、操作系统或专有软件。
Mondrian使用各种开放的、免费可用的标准。特别是,Mondrian支持以下标准:
- olap4j——通过Java的OLAP的开放标准
- XMLA——基于SOAP的系统间交互的标准
- XML——一个标准的标记语言,允许您使用简单的文本编辑器创建Mondrian Schema
因为它支持olap4j和XMLA,因此很容易嵌入Mondrian并使用它来提供多种解决方案,如交互式分析、报表和仪表板。
Mondrian与大多数数据库兼容,包括传统的关系型数据库,如Microsoft SQL Server、Oracle、PostgreSQL和MySQL,以及较新的列式数据库,如Greenplum、Netezza和LucidDB。这意味着尽管企业通常会希望以使Mondrian最大化受益的方式组织数据,但他们通常不需要新的数据库解决方案来实现这一点。数据库管理员还可以继续使用他们熟悉的系统和工具。
最后,Mondrian是开源软件。您可以在线下载二进制文件和源代码,以满足您的需求进行定制和扩展Mondrian。作为开源软件,允许用户和开发人员的社区互相帮助,并为项目提供想法。社区参与到本地用户组、在线论坛和会议中。
对于希望获得专业支持和额外企业功能的企业,Mondrian也作为Pentaho Enterprise Edition的一部分提供,这是一个完整的业务分析平台,包括数据仓库、报表和数据挖掘工具。
在整本书中,我们将向您展示如何配置和使用Mondrian的多种工具。我们还将向您展示如何将Mondrian用作报表和仪表板中的分析信息的来源。最后,我们将向您展示如何直接或使用Web服务将Mondrian集成到您自己的应用程序中。
1.4 总结
本章介绍了使用Mondrian进行业务分析。它涵盖了基于报表的分析存在的问题,并展示了Mondrian如何解决这些问题,以及Mondrian如何作为分析引擎融入分析架构中。具体来说,您看到了Mondrian提供了以下功能:
- 用户驱动的分析,用户可以自由探索数据
- 通过数据仓库的结构、聚合和缓存提高性能
- 企业级功能,如基于角色的数据访问,以限制数据对各种用户和组的访问
现在,您应该对Mondrian能够做什么以及它可以帮助解决的问题类型有一个很好的了解。您还应该了解Mondrian如何融入BI解决方案的整体架构。最后,根据您的角色,您将知道本书其余部分对您的需求最相关的部分是什么。
文章评论