信息化 频道

人力资源管理信息化升温 国产软件挖首桶金



【IT168 专稿】

一、什么是MDX

MDX是一种和SQL类似的语言,它也可以用于查询、计算和定义一些元数据。只不过SQL是基于OLTP的,而MDX是基于OLAP的,也就是说,MDX是对多维数据进行查询的。和其它的OLAP语言不同,MDX并不完全是一种报告形式语言。但用MDX查询出来的结果仍然可以在客户端程序中以表格形式进行展现。MDX和SQL一样,也有很多不同功能的API来支持MDX。其中包括对象链接和为在线分析处理的内嵌数据功能(也就是OLE DB for OLAP)、ADO MD、ADOMD.Net、XMLA(XML for Analysis)等。OLE DB for OLAP的规范描述了MDX查询和将被查询信息发送给客户端的数据结构之间的完整关系。
 
二、第一次使用MDX

    在本节中,我们将按着步骤来执行一系列简单的MDX查询。通过对本节的学习,读者可以很轻松地将MDX的概念转化为实际的例子。
    我们可以想象有一个非常简单的立方体,这个立方体有三个维度,分别代表时间、地理位置和销售业绩。我们给这个立方体起名为Sales。现在让我们看看下面的一个表格。这个表格中的数据是在2007年头两个季度在北京的销售量和销售额。这个表格有两个维度,就象一个电子表格一样,但是在第一列表示了两个维度,因此,这个表格实际上是三个维度。表格如表1-1所示:

表1-1
 
销售金额
销售数量
Q1, 2007
102,949.10
3,462
Q2, 2007
89,125.12
2,156
     
下面的MDX查询将从OLAP中获得表1-1的内容:
SELECT { [Measures].[ 销售金额], [Measures].[销售数量] } on columns, { [Time].[Q1, 2007], [Time].[Q2, 2007] } on rows FROM [Sales] WHERE ([Customer].[MA])
在上面的查询中,涉及到了SELECT、FROM和WHERE关键字,这些关键字代表了不同的部分。MDX查询的结果本身是一个表格,实际上是另外一个立方体。我们将要查询的维度作为结果集的列。这个查询应用了两个被命名的行和列。在MDX技术中,一个轴是一个边或一个查询结果集的维度。使用轴要比直接使用立方体体的维度更简单,而且每个轴还可以是多个立方体维度的组合。我们可以根据上面的语句将这个例子泛化。现在让我们将这个查询分成以下几部分:

1. SELECT子句是MDX语句的开始,用于指定我们想要获得什么信息。
2. ON关键字后面跟着用于指定维度的轴的名称。在这个例子中将销售业绩放到columns轴上,将时间信息放到row轴上。
3. MDX使用上卷括号{和}来装入从一个特定的维度或维度集合中装入数据。在我们的例子中在每个查询中只有一个维度。我们可以使用逗号来分割不同的元素。元素名可以放到[]中,可以使用多个“.”进行分割。
4.  在一个MDX查询中,我们指定了维度如何从我们的数据库中映射到我们的结果集轴上。在这个查询中是销售业绩映射在了columns轴上,而时间映射在了rows轴上。每一个查询可以用不同数量的结果集轴。前三个轴的名为"columns","rows"和"pages",这些轴从形式上和报表的格式一致。
5. 一个MDX查询中的FROM子句用于指定被查询的数据的名称。这和SQL语句中的FROM子句类似。
6. WHERE子句提供了一种用于指定在当前立方体中未出现维度的方法。如果我们不指定其它的维度,那么MDX将使用默认的维度。因此,WHERE子句对于MDX查询是可选的。

    一但数据库已经确定了查询结果集的单元格,就会将从立方体中查询出来的数据这些单元格。MDXSQL都拥有SELECTFROMWHERE关键字。但要注意的是,这三个关键字和SQL中的并不一样,在学习MDX时最好忘记SQL中的这几个关键字。这是因为它们的含义和语法不相同,如果试着将SQL中的这些关键字的经验应用到MDX中,是非常不明智的。下面让我们来看另外一个例子。为了产生表1-2的结果集,我们可以写如下的MDX语句:
SELECT { [Time].[Q1, 2007], [Time].[Q2, 2007], [Time].[Q3, 2007] } on columns, { [Customer].[MA], [Customer].[CT] } on rows FROM Sales WHERE ( [Measures].[销售额] )

表1-2
 
Q1,2007
Q2,2007
Q3,2007
MA
96,949.10
12,688.40
 
104,510.20
 
CT
24,660.70
 
91,025.00
 
16,643.90
 
    我们可以从上面的代码看到,时间、位置和销售业绩仅仅被columns上的时间列表、rows上的客户和WHERE部分的销售业绩选择。
0
相关文章