基于元数据的查询
在关系型数据库中查询时,我们使用结构化查询语言(Structred Query Language,SQL)SQL是一种很棒的语言,但它主要是为事务处理系统开发的,而不是为报表应用程序开发的,SQL存在一个问题不是语言本身,而是关系型数据库提供了相对较少的关于数据如何存储和结构化的信息,更为严重的是,很少有关于数据意义的信息。换句话说:数据库只包含很少数量的元数据。
另一方面,OLAP数据库则包含大量的元数据。例如,OLAP多维数据集时,不但定义度量值是什么内容,而且定义他们应该怎样聚合,标题应该是什么,甚至应该怎样格式化数字。同样的,在OLAP多维数据集中,创建带有许多属性的维度时,需要定义那些属性是可分租的,以及那些可分租的属性应该连接起来以形成层次结构。不幸的是,SQL并不能利用OLAP数据库中的额外元数据进行查询。因此,在使用OLAP数据源时,我们使用一种不同的查询语言,多维表达式MDX。
2001年,Microsoft、Hypersion和SAS组成了XML For Analysis(XMLA),该委员会制定了OLAP数据通用规范,XMLA规范选择查询语言是MDX,主要的OLAP提供商都加入了XMLA委员会,目前也称为XMLA的供应商,因此,在本书中学到MDX查询既能用于分析服务,也能用于其他的OLAP数据库。
使用标准的基于元数据的OLAP查询语言的一个关键好处是能使用通用的OLAP浏览器来查询PLAP数据库,例如,对于Microsoft分析服务的多维数据集,可以选择使用Microsoft Office中的Microsoft客户端工具,或是使用其他供应商提供的查询工具。任何一款使用MDX或XMLA的客户端工具。或是使用其他供应商提供的查询工具,任何一款使用MDX或XMLA的客户端工具都能理解多维数据集并生成有意义的报表,而且不不需要我们创建自定义查询。换句话说,由于MDX查询声明是基于存储在OLAP多维数据集中的元数据的,我们可以使用自动生成查询工具,而不必任何的MDX查询语句。
电子表格样式的公式
在世界上大约一半的商业活动都是用电子表格来管理的,电子表格因为非集中性、易错性、整合困难以及不易于管理而声名狼藉。那么,为什么他们成为了商业管理的关键组成部分?这是因为电子表格是很直观的创建的,例如要计算某种产品在总销售量中所占比例,我们指向该产品单元格,增加一个除号(/),再指向总销售量单元格,暗下Enter键,就能得到结果。对公式稍作修改,我们就能将它复制,用来计算任何产品的百分比。在创建百分比公式时,不必关心总数是如何计算的;总数将由不同的公式来计算,所以简单的利用得到的结果。创建其他类型的公式也同样简单,例如按月增长、上一年以来的增长以及其他许多有用的分析公式。很多很难单纯使用SQL创建的有用公式可以在电子表格内很容易的创建。
但是即使从电子表格使用者的角度来看,公式也存在着固有的问题。电子表格公式本质上是二维的,含有数字的行以及含有字母的列。如果需要对不同的时间段内容复制相同的表格,特别是具有不同的产品或不同的日期,公式的修改将会非常麻烦,并且也很容易出错,例如,很难保证参考值C12指向的是3月而不是4月。随着公式变得长而复杂,甚至公式的编写者都难以知道公式的真正含义。另外,用户往往会在公式的中间规范添加一个“调整过的”公式或变量,并且往往会忘记曾经做过的这个修改。
从管理者角度来看,电子表格公式有更大的问题。电子表格中的公式是关键的“业务逻辑”,在整个公司中使用,即使表面上(也很显然)使用了相同的逻辑,有一个人创建长度计算可能和由另一个人创建的有细微不同。
OLAP多维数据集中的公式同样具备许多电子表格所具有的优点。例如,在创建MDX公式表达式时,可以在整个多维数据集中引用任何单元格,而不用关心那个单元格中的值是如何计算的。
MDX公式比电子表格更简单:
<1>MDX公式使用命名引用 在电子表格公式中对其他电子表格的单元格的引用只显示行和列。在MDX中,公式采用有意义的名称来引用多维数据集中的其他单元格,例如,公式采用[Actual]/[Budget],而不是=c14/d14
<2>MDX公式易于管理 在电子表格中,公式必须显示复制到每个需要它的单元格中,如果将原来表格中的50种产品改为500种产品,就必须将公式粘贴到新的行中。在分析服务中,通常定义一个通用的MDX公式。比如一个被定义用于产品的MDX公式无论报表中将显示多少种产品,该公式同样可以使用。同样,为了一个新的区域而创建一个电子表格,我们必须确保新的电子表格中的公式指向了正确的单元格。在分析服务中,在切换到这个新区域时自动的使用通用的MDX公式。
<3>MDX公式时多维的 点在表格的引用在在本质上是二维的,即用字母表示的列和用数字表示行。这种固有属性限制了公式中能使用的维数。MDX引用使用了一种不受二维物理位置限制的结构(和几何坐标使用的相似)。如果必要的话,可以显示的包含很多维度。因此,MDX引用通过利用当前成员(current member)的概念来简化多个维度的使用。例如,把公式=c14/d14复制到同一个工作薄的多个工作表中,公式将自动引用当前工作表的相应单元格的数值。同样,MDX公式[Actual]/[Budget]自动使用当前时间段、当前部门或当前产品。
<4>MDX公式利用了元数据 电子表格公式并不知道自身与其他单元格的逻辑关系,即没有元数据,而MDX公式则利用了多维数据集的元数据和维度成员关系进行哪些难以在电子表格中执行的计算。例如,在点在表格中,很容易计算每种产品占总数的百分比,但却难计算每种产品在其他属性产品种所占有的百分比。
除了上述几个特点,MDX公式存储在服务器中,这使得商业逻辑位于集中、可管理的位置、而不是将业务逻辑分散在几百个独立的电子表格中。