配置 HTTP 访问的 OLAP 源
在我们开始构建基于 Web 的 OLAP 报告应用程序之前,我们必须配置由 Microsoft Internet 信息服务 (IIS) 访问的 Analysis Services 数据源。IIS Web 站点必须安装在安装 Analysis Services 的同一个服务器上,并且它还必须包含一个称为 msolap.asp 的单独文件。该文件是来自 HTTP 端口上的请求与 Analysis Services 数据源之间的桥梁。该文件位于 \Program Files\Microsoft Analysis Services\bin 路径之下。我们建议您利用安全套接字层 (SSL) 证书在安全连接 (HTTPS) 上配置访问的数据源。该步骤要求您购买 Analysis Services 服务器的 SSL 证书。还可以利用不安全的 (HTTP) 连接来访问数据源,但我们不推荐使用这种方法。
一旦在 Analysis Services 服务器上安装了 IIS,就可以为 HTTPS 访问配置新的 Web 站点。首先在默认的 Web 根目录 (\Inetpub\wwwroot\) 之外创建一个新的 Web 站点目录。出于安全的目的,我们建议您停用默认的 Web 站点。另外,一旦安装了 SSL 证书,就应当关闭防火墙的 80 端口并为 HTTPS 访问打开 443 端口。
将 msolap.asp 文件从 \Program Files\Microsoft Analysis Services\bin 目录复制到新的 Web 站点目录中,并利用 IIS Manager 将新的 Web 站点目录配置为 Web Application 并为 Web 站点添加一个 Host Header Name(例如,olap.mycompany.com)。
购买并在服务器上安装 SSL 证书。在购买验证的过程中,通过 80 端口一定已经可以访问 Web 站点。一旦安装了证书,就可以关闭防火墙的 80 端口并打开 443 端口。利用 IIS Manager 设置 Directory Security,这样可以禁用 Anonymous Access 而启用 Basic Authentication。最后,重新设置 IIS 以应用这些更改。
一旦建立了 HTTPS 访问,必须更新指向 OLAP 数据源的 OLE DB 连接字符串。连接字符串的格式如下:
Provider=MSOLAP;user id=Domain\Username;password=Password;Data Source=https://ServerName;Initial Catalog=OLAPDataSourceName
有关更多信息,请参考知识库中的文章 279489“How to Connect to Analysis Server 2000 By Using HTTP Connection”。
OLAP 安全访问
一旦可以通过 HTTPS 访问 OLAP 数据源,安全凭据是必需的,因为现在任何可以浏览您的 Web 站点的人都可以使用您的数据源。例如,某个远程用户只要为 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 窗体中,如图 7 所示。该界面包含一个嵌入式客户端 OWC PivotTable 控件以及一组按钮,这些按钮用来调用 OLAP 数据源连接以及保存和检索自定义报告。XML Web 服务中的一组 Web 方法可以直接提供这样的功能,这些方法可以在 wsOLAP.asmx 找到。该用户界面利用 olap.js 脚本文件中的一组客户端 JavaScript 函数挂接这些 Web 方法。这些 JavaScript 函数通过客户端调用方法将大部分请求委托给 Web 服务方法。这些要通过利用称为 webservice.htc 的 DHTML 行为文件来完成。
图 7 基于 Web 的 OLAP 报告应用程序
该示例应用程序的名称为 OLAPReport,可以从本文顶部的链接处下载该 Visual Studio® .NET 1.1 项目。它利用 Foodmart 2000 数据仓库作为它的 OLAP 数据源,并利用 Sales 多维数据集作为它的数据成员。Foodmart 2000 安装有 SQL Server 2000 Analysis Services。
一旦下载并安装了这个项目文件,您只需遵循几个步骤就可以让编译后的项目正确地工作。首先,需要更改 OLE DB 连接字符串,应用程序利用该字符串引用 OLAP 数据源。该连接字符串被存储为 Web.config 文件中的一项自定义应用程序设置:
<appSettings>
<add key="OLAPConnectionString" value="Provider=MSOLAP.2;
Data Source=https://ServerName;Initial Catalog=Foodmart 2000>
</appSettings>
注意,该连接字符串不包含安全凭据(例如,用户 ID 和密码)。这些凭据只有在 Analysis Server 中实现安全角色时才需要。就像前面说明的那样,我们鼓励您添加安全角色。一旦就绪,只要将凭据添加到连接字符串的末端即可。
切记,为了使该连接字符串可以使用,需要为 HTTP 访问配置 Analysis Server。这些步骤前面也有说明。该项目最初设置使用 http://localhost/olap 作为其数据源,因此需要在默认的 Web 站点下创建一个称为 olap 的虚拟目录,并将 msolap.asp 文件复制到这个目录中。作为一条捷径,可以只将 Data Source 值替换为您的机器名称,而省略前面的 https://。这将提供一个到 OLAP 数据源的标准连接,而不是一个 HTTP 连接。对于演示的目的这样是可行的,但切记,如果不启用 HTTP 访问,就无法为网络域外部的用户公开您的 Analysis Server。
最后,在继续操作之前,可能需要设置从 OLAPReport 项目到 OWC10 COM 组件的引用。(安装项目会为您做这一切,但无论如何,了解这些步骤是非常有用的)。为了添加引用,打开 Solution Explorer,然后鼠标右击项目图标并从弹出式菜单选择 Add Reference。对话框一旦打开,切换到 COM 选项卡,定位到称为 Microsoft Office XP Web Components (OWC10.DLL) 的组件。单击 Select 按钮,然后单击 OK。随后 Visual Studio .NET 将会为该组件生成一个 .NET 包装,并添加一个 OWC10 项目引用。
将控件连接到数据源
现在,我们依次实现该应用程序的三个功能。首先,我们讨论 Pathway 1 — 如何设置客户端 OWC 控件与 OLAP 数据源之间的连接。利用用户界面上的 Set Connection 按钮启动该功能(参见图 7)。该按钮调用 JavaScript 函数 initializePivotTable,并传递要连接的多维数据集名称 — 在这里为“Sales”。
该 JavaScript 函数转而异步调用 InitializePivotTableXML Web 方法(由称为 webservice.htc 的 DHTML 行为支持,我们在前面介绍过它)。该 Web 方法连接到 OLAP 数据源,然后生成 PivotTable 的 XMLData。该 Web 方法的输出结果由称为 onInitializePivotTableResult 的 JavaScript 函数处理。图 8 显示了这些 JavaScript 函数的代码,而图 9 显示了此 Web 方法的代码。这两个图中的代码非常简单,并且可以重用。非常简单,这些函数允许我们在 Web 服务器上生成自定义 XMLData,从而可以传递给客户端 PivotTable 控件。
在建立连接的过程中,我们可以用一个 Sales 多维数据集的空白报告有效地初始化 OWC 控件。该空白报告利用多维数据集所有可用的字段和度量来填充 Field List。然后,通过将字段拖放到 PivotTable 的 Row 与 Column 字段中,将 Measures 拖放到 PivotTable 的 Totals 字段中,用户可以创建自定义报告。每次用户将字段放到 PivotTable 上,控件都会直接向数据源发送一个查询,这反过来会发送回更多的查询结果。这样的交流过程是独立于 Web 服务而进行的,Web 服务仅在建立控件与数据源之间的初始连接时才是必需的。这种交流由图 2 中的 Pathway 2 表示。
动态生成自定义 PivotTable 报告
现在,我们通过编程生成自定义报告来更深层次地挖掘 PivotTable 对象模型。我们想要构建的自定义报告允许用户选择两个城市并比较 Drinks Product Family 的 Store Sales。我们使用和 Pathway 1 相同的方法,这意味着我们调用一个 Web 方法来生成描述该报告的 XMLData。然后,我们在该 Web 方法中将 XMLData 赋值给嵌入式控件的 XMLData 属性。界面提供两个城市名的下拉列表和一个称为 Load Custom Report 的按钮(如图 7 所示)。该按钮调用称为 LoadCustomReport 的 JavaScript 函数,它接受 Web 窗体的两个城市名作为输入。该函数转而调用称为 LoadCustomPivotTableReport 的 Web 方法,该方法以编程方式为自定义报告组合 XMLData。最后,JavaScript 处理程序函数从该 Web 方法接收 XMLData,然后将它赋值给嵌入的 PivotControl 的 XMLData 属性。图 10 显示了该 Web 方法的代码。
LoadCustomPivotTableReport 方法使用了图 5 中描述的许多 PivotTable 属性。还要切记下面的小技巧:
| • |
利用 InsertFieldSet 方法将适当的 PivotFieldSet 插入到行或列轴中。 |
| • |
利用 IncludedMembers 属性定义表中包含的不同 PivotField 值。IncludedMembers 属性需要 Variant 数组,它等同于 .NET Framework 中的 Object 数组。任何其他数组类型都将产生错误。 |
| • |
利用 IsIncluded 属性启用或禁用 PivotFieldSet 中特殊的 PivotField。 |
| • |
利用 InsertTotal 方法将适当的度量插入到总计网格中。 |
| • |
NumberFormat 属性定义度量的格式。该属性接受格式代码(例如,“0.###”)或预定义格式(例如,“Currency”或“Percent”)。 |
保存与检索自定义报告
现在我们已经经历了创建自定义报告的艰辛,在每次需要生成新报告时我们不希望重复这个过程。谢天谢地,复制该报告必需的数据都包含在 XMLData 属性中。因此,保存报告只是将 XMLData 属性中的内容保存到一个永久性存储媒体(例如关系型数据库)中。加载报告只是检索存储的 XMLData 并将其重新绑定到 PivotTable。这种功能如图 2 中的 Pathway 3 所示。
该应用程序的 Web 服务包括保存和检索自定义报告的 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 函数,如图 11 所示。该函数调用一个 Web 方法:该方法打开该文本文件,检索 XMLData,然后将其传递回来以绑定到 PivotTable 控件。
这种文件方法对于演示的目的来说是方便的,但是生产系统应当使用一个关系型数据库来存储自定义报告的 XMLData。这种方法可以提供更好的并发管理,并允许您以一种更有条理的方式来存储报告。
使用 OWC 事件
OWC 10 组件提供了几种非常有用的事件,在客户端事件处理程序中可以捕获这些事件。这些客户端事件处理程序可用 VBScript 或 JavaScript 编写。在 VBScript 中,可使用基本事件符号,如下所示:
Sub <ObjectName>_<EventName>
在 JavaScript 中,必须使用 for-event 语法:
<script language="javascript" event="EventName" for="ObjectName">
该示例应用程序说明了如何捕获 Query 与 CommandExecute 事件。事件处理代码如图 12 所示。当 Query 事件被激发时,应用程序在 Web 页左边的文本区域字段中添加一些事件日志记录。当 CommandExecute 事件被激发时,我们检查一下,看看它是否是个刷新命令。如果是,应用程序就将日期和时间添加到事件日志记录的文本区域中。
将图表绑定到 PivotTable 控件
在许多情况下,图形化表示数据对用户来说非常有价值。幸运的是,OWC 提供的 ChartSpace 控件完全可以提供这类功能。为了改善我们的自定义报告,我们将生成一个条形图来表示数据。虽然这看起来像是一项巨大的任务,但 ChartSpace 控件可以在这个过程中为我们提供很大的帮助。它的一项非常有用的功能就是它可以将另一个控件(例如 PivotTable 控件)绑定为它的主数据源。然后它可以以图形格式显示当前的 PivotTable 视图。最终的效果是,PivotTable 视图中的更改将会自动反映在 ChartSpace 控件中。
我们的示例中,一旦生成自定义 PivotTable 报告,我们只需将 PivotTable 控件赋值给 ChartSpace 控件的 DataSource 属性:
/// Bind the Chart control to the PivotTable control frm1.ChartSpace1.Clear(); frm1.ChartSpace1.DataSource = frm1.PivotTable1; // Set the chart type to 3DBar. frm1.ChartSpace1.Charts(0).Type = 50;
为了删除以前的图表实例,在给 DataSource 属性赋值之前,需要调用 Clear 方法。ChartSpace 控件提供了许多可自定义的属性(包括 Type 属性),它接受一个 ChartChartTypeEnum 枚举值来定义图表布局。
创建自定义分组
最后,我们来看一下 OWC 10 的一个重要的新功能 — 能够创建自定义分组。目前,我们的报告根据 Time 字段集来对商店的销售额度量进行分组。在本例中,Time 被分组成 Year/Quarter/Month。假设我们希望利用一个多维数据集中已定义的字段以外的分组来对我们的自定义报告分组。我们可以通过利用 OWC 10 中的自定义分组功能来实现。标签为 Apply Custom Grouping 的按钮调用一个 JavaScript 函数,该函数转而调用 ApplyCustomGrouping Web 方法。该输入参数是目前加载报告的 XMLData。该 Web 方法然后就会加载一个 PivotTable 对象并利用 AddCustomGroupField 方法来定义自定义分组,在这里为半年时间的分组。代码如图 13 所示。
请注意,我们已经添加了一个有两个成员(“1stHalf”与“2ndHalf”)的自定义组 (“CustomGroup1”),这两个成员包含了整个年度。利用 AddCustomGroupMember 方法来添加自定义成员。当在 Web 窗体上实现此功能时,ChartSpace 控件也将自定义分组合并到了条形图中 — 这是利用 Office Web Components 10 中集成组件的另一个好处。
对于自定义组支持来说有一个重要的问题。目前,XMLData 不保存适当的数据以保留自定义分组的名称。如果您要保存 XMLData(就像我们前面在 Save Report 功能中所做的那样),然后加载具有已保存 XMLData 的PivotTable,自定义组(“1stHalf”和“2ndHalf”)的标题将会显示为 GUID。虽然如此,OWC 10 组件在集成性方面比以前版本有重大改进,这使其成为一种构建基于 Web 的 OLAP 报告的非常有用的工具。
HTTP 使用对客户端的要求
现在我们已经构建了基于 Web 的 OLAP 报告应用程序,为了开始使用这个应用程序,各 Web 客户端必须要实现四个配置步骤。首先,每个 Web 客户端必须在它们的机器上安装一个经过授权的 Office XP 本地副本。或者,它们必须可以访问某个服务器(对该服务器具有网络访问权)上的经过授权的 Office XP 副本。 Office XP 所带的 OWC 组件要满足同样的授权要求。
其次,每个 Web 客户端都必须使用 Internet Explorer 5.0 或者更高版本。原因如下。Web 应用程序利用 Web 服务 DHTML 行为,这种行为要求使用 Internet Explorer 5.0 或者更高的版本。另外,客户端 OWC 组件为 Microsoft COM 组件,这些组件不能在本地的非 Microsoft 浏览器中运行。(我们知道,有些浏览器为了运行客户端 COM 控件提供了插件程序,但是我们自己没有测试 OWC)。
第三个配置步骤是,每个 Web 客户端必须安装有正确的 OLE DB 提供程序:具体地说,Microsoft OLE DB Provider for OLAP Services 8.0 或者更高版本。该提供程序与可重新发布的 PivotTable Service 一道安装,PivotTable Service 中包含有一组 DLL 和所需版本的 Microsoft Data Access Components (MDAC)。可以从 SQL Server 2000 光盘的 \Msolap\Install\Pts 之下安装 PivotTable Service。需要选择所提供的两个安装文件中的一个文件:PtsLite.exe 或 PtsFull.exe。后者安装 PivotTable Service 和 MDAC,而前者只安装 PivotTable Service。如果不能确定需要安装哪个版本,只要安装 PtsFull.exe 即可。每台 Web 客户端机器几乎都需要 PivotTable Service,因为只有 Microsoft Analysis Services 可以自动安装服务。可以利用 Excel PivotTable 向导来确定已经运行 Web 客户端的机器是否安装了 PivotTable Service。
第四个配置步骤是,每个 Web 客户端必须将应用程序的 Web 域添加到它们的 Internet Explorer 的可信站点列表中。应用程序所在的域与客户端机器的域不同,因此每次查询 OLAP 数据源时 OWC PivotTable 组件都必须跨越域边界。由于这个原因,应用程序的 Web 域必须要包含在客户端的可信站点中。为了保证的确做到了这一点,打开 Internet Explorer 并单击 Tools | Options 菜单。选择 Security 选项卡,单击 Trusted 站点图标,然后单击 Sites 按钮。
另外一种方法是,可以为客户端提供一个注册表文件,该文件会自动更新它们的可信站点列表。这里是一个示例注册表项更新:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\mycompany.com] "https"=dword:00000002
注意,该注册表文件必须为客户端机器上的每位用户都运行一次。这是因为它要更新 HKEY_CURRENT_USER 注册表配置单元。例如,如果两个域的用户共享同一台机器,那么他们每人都需要为各自的帐户运行注册表文件。
小结
基于 Web 的 OLAP 报告解决方案提出了吸引人的技术挑战,因为它们涉及几种复杂的技术,包括 SQL Server 2000 Analysis Services、Office Web Components、XML 和 ASP.NET。这里我们介绍的体系结构其设计利用了所有这些技术,以求具有最佳功能。其他的体系结构也完全有可能,特别是随着当前技术在将来的不断发展。
下载本文的代码: olapDemo.rar
浙公网安备 33010602011771号