摘要
许多机构都使用在线分析处理(OLAP)技术分析其关键业务数据。基于 OLAP 的数据钻取为查询多维数据集以及通过钻取数据来获得模式提供了一种途径。ASP.NET 和 Microsoft Office Web Components (OWC)使能基于 Web 的 OLAP 报表。OWC 控件包含可以嵌入到 Web 页面以及程序员可编写脚本的 PivotTable 和 Chart 组件。本文作者使用 ASP.NET、OWC 和 SQL Server 2000 Analysis Services 构建了一个基于 Web 的 OLAP 报表应用来举例说明了 PivotTable 和 Chart 组件的使用。
越来越多的公司使用在线分析处理(OLAP)和数据钻取技术来处理它们复杂的数据。OLAP是专门用于处理多维数据集的技术,这些数据间的模式和关系并不清晰。Microsoft® SQL Server 2000 Analysis Services 因其与 SQL SERVER 2000 的紧密集成并且与 SQL Server 后续版本的更紧密的集成,正在成为一种被广泛采纳的 OLAP 处理和数据钻取的选择。
由于 OLAP 技术的广泛应用,开发人员需要依赖基于OLAP的多维数据源来设计开发报表设计方案。这是一项复杂的工程,因为基于 OLAP 的报表设计或者数据钻取技术,需要更多的灵活性和更高的交互性。数据钻取技术,按照其定义,不是静态的,而是用户可以根据其需要,在构建的多维数据集 立体空间范围内来创建自己所需要的视图。这与传统的基于关系数据库系统(RDBMS)的查询形成鲜明的对比,后者受制于定义好的表间的关系。RDBMS查询无疑是有创造性 的,但有一定的局限性。借助基于OLAP的数据结构,你可以更灵活地进行查询,而传统的静态报表设计对于查询和理解基于OLAP的数据毫无帮助。
软件开发人员在设计一项基于OLAP的报表设计方案时面临四个方面的问题:
第一、这项方案必须可以连接并查询多维数据源;第二、 这项方案必须保证用户灵活便利地使用数据;
第三、由于不能预测那些是用户认为重要的数据视图,因此这项方案必须允许用户存储定制的报表设计;第四、这项方案必须提供一个包含图表的可读取的接口,因为包含图表的报表设计在视觉上更有效果。
请允许我增加第五条:这项方案应该是基于 Web 的,即它应是一个基于服务器的 Web 应用程序,可以通过浏览器进行访问(通过 Internet 或者 Intranet),有了上述五条苛刻的要求,开发者该如何做呢?
事实上,微软公司提供了一组称为 Office Web Components (OWC) 的组件可以帮助我们构建基于Web 的复杂的、界面友好的基于 OLAP 的方案。 OWC 是一组 COM 控件集,用于在 Web 上发布电子表格(spreadsheets)、数据透视表(pivot tables)和图表(charts),它为用户提供了和 EXCEL 一样丰富的交互体验。同时,它还为开发人员提供了丰富的编程接口,借助于这些功能强大且灵活的接口,开发人员可以设计专业的方案。Figure 1 显示的是 OWC PivotTable 组件,它可以连接到OLAP数据源并借助便利的接口拖放来实现查询操作。
Figure 1 OWC PivotTable Component
本文的目的旨在解决开发人员的要求,假设他们正在使用 ASP.NET 和 Office Web Components(OWC)开发一个用于Web上的基于 OLAP 的定制 的报表设计方案。我们将提供一个基于 XML 的 Web Services 的一体化应用程序架构,并展示如何建立该应用程序架构并配置OLAP数据源以便通过HTTP协议 来访问。此外,我们还将描述如何向用户部署这个解决方案。大多数Web应用程序完全安装在Web服务器上并且在应用部署时不需要用户的交互操作,但OLAP 和 OWC对想使用你的定制方案的用户提出了一定的要求。
重要的概念和术语
OLAP 技术中充斥的专业术语是理解其真正好处的障碍。本文假设读者熟悉 OLAP,尤其是熟悉SQL Server 2000 Analysis Services。即使如此,在继续讨论之前,我们应该首先阐明本文中涉及的以及在广阔的OLAP和数据钻取领域应用的重要术语和概念。
首先,区分 OLAP 和数据钻取技术是很重要的。基于 OLAP 的数据源或者数据仓库可被细分为一个或多个多维数据集,该多维数据集是一个可以用 MDX 进行查询的多维数据结构。多维数据集 包含一组被称为维度的属性,维度可以大致理解为数据表中的字段,与数据表中的字段不同的是维度中还包含一组级别(level)组成的等级(hierarchy)。例如,一个年历维度可被分为季度级别、月级别、周级别。一个多维数据集中包含一组度量值(measure)。度量值是实际的数值,一般是数值型。例如,你可以通过”零售”多维数据集按时间(维度)和地点(维度)浏览各商品销售情况(度量值)。
SQL Server 2000 Analysis Services 使你能通过被称作 Analysis Manager 的 MMC 管理单元完成 OLAP 处理。 这只不过是一个被集成到 Analysis Services 的数据透视表接口,基于 OLAP 的数据常常是通过数据透视表来浏览,它允许你 将多个维度和度量值拖放到类似 spreadsheet 的布局中。PivotTable 控件将拖放操作转换为 MDX 查询,然后再由 MDX 查询传送给 OLAP 数据源, 最后返回结果集。
Analysis Manager 在数据库服务器上安装一个 PivotTable 服务,该服务包含一个允许连接到OLAP 数据源的 OLE DB 提供者(provider)。该提供者被取名为 Microsoft OLE DB Provider for OLAP Services 8.0 ,没有它,你是不可能连接到 OLAP 数据源上的。用于该提供者的连接字符串包括 用于数据仓库的 DataSource 属性和表示拟进行连接的多维数据集名的 DataMember 属性。PivotTable 服务还必须安装在客户机上,否则,客户机上的 PivotTable 控件 将不能与 OLAP 数据源通讯。
基于 Web 的 OLAP 报表应用的框架
Figure 2 显示了基于Web的OLAP报表应用的大致框架,它包括三个途径,依次编号以展示程序的工作流。他们共同提供了下述的特性:
Figure 2 OLAP 框架
在程序中 XML 扮演了一个中心角色。OWC PivotTable 控件在本地将其内容序列化为XML格式。你不仅可以写XML格式的数据,而且可以用XML数据来加载PivotTable控件,只要这些XML数据匹配XML Schema。因此ASP.NET开发人员可以创建基于XML的Web Services实现与OWC PivotTable控件的交互访问。一个Web方法产生格式化的XML给PivotTable 控件(Pathway 1), 同时另外一个方法接受来自PivotTable 控件的序列化的输出并保存到永久媒介譬如数据库或文件中。
一旦在 PivotTable 和 OLAP 数据源间建立好联结,用户就可以借助PivotTable控件中的拖拉UI进行定制的数据查询工作。控件一被更新,它动态产生一个多维表达式(MDX)并通过HTTP网关将请求发送给OLAP数据源(Pathway 2)。这种通讯独立于Web服务器,Web也直接访问数据库。在此结构中,Web服务器的作用是建立在PivotTable和OLAP数据源间的初始化连接,确保定制的PivotTable报表的保存和检索。
Office Web 组件
OWC10.0 提供的功能不仅强大而且为用户所熟知。因此,你定制的解决方案能很快得到熟悉并用惯了 Excel 的用户的认可。Figure 3 是随同Office XP一起交付的 OWC 控件 (version 10) 的一个概述 ,注意 随 Office 2000 发布的是 OWC 的前一个版本(version 9),其提供的编程接口和用户接口要逊色得多。虽然我们所讨论的特性并不都支持以前的版本,但大多数 OWC (version 10)的特性都适用于 OWC (version 9)。
在 Web 项目中使用 OWC 控件时,ASP.NET 开发人员所能使用的资源很少。大多数网上的例子代码都假设你使用客户端的脚本语言(如 VBScript )与 OWC 控件交互。虽然这是一个可行的方法,但它忽略了使用 ASP.NET 更强大的功能的可能性。即创建一个服务器端的 OWC 实例,建立一个连接,设置属性,然后使用这个实例为单独的 PivotTable 控件客户端实例产生 XML 数据。编程逻辑被包含在OLAP Data Access Objects 之中,部分架构示意图参见 Figure 2 中的 Pathway 1。接着,XML 数据通过基于 XML 的 Web Service 传送给客户端组件。见 Pathway 1。
Figure 4 中列出了我们将在本文中使用的 OWC 控件——即 PivotTable 和 Chart 控件。Spreadsheet 和 DataSourc 控件不在此列,因为它不涉及我们在这里所讨论的体系架构。Figure 5 和 Figure 6 分别概要介绍了 PivotTable 和 Chart 控件各自的编程接口。
PivotTable 有一个复杂的接口,但其最重要的是 XMLData 属性。这个属性是整个 PivotTable 内容的 XML 表示形式,包括与 OLAP 数据源的连接信息。XMLData 同时还保存有当前视图的维度和量度值以及应用的格式化信息。XMLData 可以被设置和获取,它是动态定制 PivotTable 控件的重要手段。
为 HTTP 访问配置 OLAP 数据源
在我们开始着手构建我们的基于 Web 的 OLAP 报表设计程序前,我们必须配置 Analysis Services 数据源以便 IIS 可以访问它。IIS Web站点必须和 Analysis Services 安装在同一服务器上,并且确保在IIS Web站点中包含一个名为 msolap.asp 文件。此文件 提供了 HTTP 端口请求和Analysis Services数据源间沟通的桥梁。Msolap.asp存放在\Program Files\Microsoft Analysis Services\bin目录下。我们建议使用安全套接字层(SSL)认证机制配置一个安全连接(HTTPS)来存取数据源。为此你必须购买用于 Analysis Services 服务器的 SSL 认证。当然,我们也可以使用非安全(HTTP)连接方式来存取数据源,不过我们不建议这样做。
一旦IIS在 Analysis Services 服务器上安装完毕,配置一个用于 HTTPS 存取的新 Web 站点。首先,在默认的Web根目录(\Inetpub\wwwroot\)外新建一个Web站点目录。为了安全的目的,我们建议停 到默认 Web 站点。除此之外,如果你安装了SSL认证,需要关闭防火墙上的80端口,打开443端口。
其次,将 msolap.asp 文件从\Program Files\Microsoft Analysis Services\bin 目录拷贝到新建的Web站点目录,使用 IIS 管理器将新建的 Web 站点目录配置为一个 Web 应用,为 Web 站点添加 Host Header Name (例如,olap.mycompany.com)。
第三,购买并在服务器上安装 SSL 认证。在购买认证过程中确保 Web 站点可以通过 80 端口访问。认证安装完毕后,在防火墙上关闭80端口并打开443端口。使用 IIS 管理器设置 Web 目录的安全以禁止匿名访问,允许 Basic Authentication。最后,重置 IIS 以接受更改。
HTTPS 创建完毕后,必须更新指向 OLAP 数据源的连接字符串。连接字符串格式如下:
Provider=MSOLAP;user id=Domain\Username;password=Password;Data
Source=https://ServerName;Initial Catalog=OLAPDataSourceName
更详细的信息参见知识库文章(Knowledge Base )Q279489:“How to Connect to Analysis Server 2000 By Using HTTP Connection”.
安全访问OLAP
一旦 OLAP 数据源可以通过 HTTPS 来访问,那么安全信任是不可或缺的。因为现在任何一个可以浏览网站的人都有可能访问网站上的数据源。譬如,一个远程用户 只要知道 Analysis Server 的 URL以及 Initial Catalog 的名称,就可以打开 Excel 并将 PivotTable 联接到 OLAP 数据源。
Analysis Services 实现了基于 Windows NT 用户帐号的多维数据集安全规则。基本思路是在服务器上创建一个或多个本地 Windows NT 用户帐号,赋予它们 SQL Server 数据库角色。然后将该数据库角色赋予给某个多维数据集角色,并绑定该数据库角色到特定的多维数据集。多维数据集角色继承了 Windows NT 用户 ID 和密码,你将用户 ID 和密码添加到 OLAP 数据源连接字符串中即可。
值得注意的是:一个 OLAP 数据源中也许包含多个多维数据集。通过设置 OWC PivotTable 控件中的 <DataMember> XML 标签值为一个有效的多维数据集名(在下一部分解释),你可以连接到特定的多维数据集。这个多维数据集必须被赋予一个角色,该角色与 OLAP 数据源连接字符串中的信任对应。
建立应用程序
现在是我们用 ASP.NET 和 OWC 10 建立应用程序的时候了。该应用程序的用户界面包含在一个名为 owc10.aspx 的 Web Form 中, 如 Figure 7 所示。界面中包含一个内嵌的客户端的 OWC PivotTable 控件和一组按钮,分别用于激活 OLAP 数据源连接、保存和获取定制的报表。 这些功能由 wsOLAP.asmx 中的 XML Web Service 通过一组 Web 方法直接提供。olap.js 脚本文件中是一组客户端的 JavaScript 函数,用户接口使用 这些函数与上述 Web 方法挂钩。这些 JavaScript 函数通过在客户端调用这些方法将大多数请求委托给 Web Service。在一个DHTML 行为文件Webservice.htc中,实现了上述 上述功能。在olap.js文件中,用户接口使用一组客户端的JavaScript函数调用了上面的Web 方法。实现对Web Service的访问。这些都是在一个 DHTML 行为文件 Webservice.htc 中完成的。
Figure 7 Web-based OLAP 报表设计程序
本文例子程序被称为 OLAPReport,使用 Visual Studio.NET 1.1 版本开发,使用 Foodmart 2000 数据仓库作为 其 OLAP 数据源,并且以 Sales 多维数据集作为其数据成员。 Foodmart 2000 是和 SQL Server 2000 Analysis Services 一起安装的例子数据库。
如果你已经下载并安装了例子工程文件,你必须完成以下几步以便保证其正常工作。首先,更改OLE DB 连接字符串,应用程序会用他访问 OLAP 数据源。 该连接字符串被存储在 Web.config 文件中作为应用程序的自定义设置。
<appSettings>注意这个连接串没有包含安全信任(如 User ID 和 password),只有在 Analysis Server 中实现了安全规则时才需要这些信任, 如前所述,我们鼓励你添加安全规则。一旦你准备就绪,只要简单地将此信任加到连接串的尾部即可。
<add key="OLAPConnectionString" value="Provider=MSOLAP.2";
Data Source=https://ServerName;Initial Catalog=Foodmart 2000>
</appSettings>
保存和获取定制的报表
既然我们已经将报表的产生过程经历了一遍,我们不希望每次产生新报表时都重复这项工作。可喜的是,用于复制报表的数据保存在 XMLData 属性中。因此,保存报表的工作变得很简单,只需将XMLData 属性保存在可永久存放的介质,如关系数据库中即可。加载报表的工作同样简单,只需获得保存的 XMLData 并 将它重新绑定到 PivotTable 上即可。这个特点如 Figure 2 中的 Pathway 3 所示。
应用程序的 Web Service 中有两个方法,分别用于保存和获取定制报表的 XMLData。在例子中,我们将 XMLData 保存在名为 OLAPReport1.xml 的文本文件中。程序界面提供了两个按钮:Save Report 和 Load Saved Report。Save Report 按钮调用一个 JavaScript 将 PivotTable 控件的 XMLData 发送到下面的 Web方法中:
function SaveReport() {
// Purpose: Call Web Service method to save the report
var strReportXMLData = frm1.PivotTable1.XMLData;
var iCallID = service.svcOLAP.callService(onSaveReportResult,
''SaveReport'', strReportXMLData, ''OLAPReport1.xml
}
此 Web 方法紧接着将 XMLData 写入一个文件。Load Saved Report 按钮则调用一个 JavaScript函数完成反向的工作,如 Figure 11 所示。此函数调用一个 Web 方法打开文本文件,获取 XMLData,然后回传用以绑定 PivotTable 控件。
使用 OWC 事件
OWC 10 提供了几个有用的事件供我们在客户端事件处理中使用。可以用 VBScript 或 JavaScript 来写事件处理程序。VBScript 中事件处理格式如下:
Sub <ObjectName>_<EventName>JavaScript 中的语法如下:
<script language="javascript" event="EventName" for="ObjectName">例子程序中演示了如何捕捉 Query 和 CommandExecute 事件。事件处理代码参见 Figure 12。当Query 事件被激活时,程序在 Web 页的左边文本框中填写事件日志。CommandExecute 事件被激活后,我们首先检查是否它是个刷新命令。如是,程序在文本框中填写事件的日期和事件日志。
frm1.ChartSpace1.Clear();在为 DataSource 属性赋值前需要调用 Clear 方法以清除以前图表的实例。ChartSpace 控件提供了许多定制的属性,包括Type属性,其接受一个 ChartChartTypeEnum 值以定义图表的格式。
frm1.ChartSpace1.DataSource = frm1.PivotTable1;
// Set the chart type to 3DBar。
frm1.ChartSpace1.Charts(0).Type = 50;
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet注意,注册文件对同一客户机上的不同用户必须分别运行,因为其只更新 HKEY_CURRENT_USER下的注册键值。例如,如果两个域用户共享同一机子,那末他们必须以各自的账号登陆后分别运行注册文件。
Settings\ZoneMap\Domains\mycompany.com] "https"=dword:00000002