标签:
XML for Analysis (XMLA) 是一种基于简单对象访问协议 (SOAP) 的 XML 协议,它是专为对驻留在 Web 上的任何标准多维数据源的通用数据访问而设计的。XMLA的好处就在于其应用级别的传输协议是SOAP,这使XMLA的服务提供者具有了WebService提供者的角色,从而各种语言编写的客户端都可以轻松访问,而不会带来额外的麻烦。
记得多年前我们提供基于J2EE体系的商业智能解决方案时,所有的OLAP Server提供的接口都是传统的开发接口,尽管在我们的J2EE服务中面向查询及分析定义了统一的元数据结构,但仍然要对每一个Olap Server开发JNI代码来完成传统语言接口向Java体系的转换。而且,每一个厂商的查询语言都不相同,Microsoft Analysis Service是OLEDB/ADOMD上的MDX语句,Essbase及Oracle Express是C实现的DLL上的自有的DML语言,而Mondrian等当时还没有出现。
如今,XMLA已经越来越受到厂商的支持,除了Microsoft SSAS,Essbase(7.0以上)、SAS、Mondrian等都提供了”XMLA+MDX”的接口,这为包含了OLAP客户端逻辑的解决方案开发降低了学习成本,增加了平台移植性。
本文将以SSAS为例,讲解XMLA的开发过程。这些内容虽然在手册中多有提及,但内容很零散,而且编排是手册的格式,篇幅长不易快速上手。因此提供一个简单的指引也许会有帮助。
XML for Analysis (XMLA) 开放标准支持对驻留在万维网上的数据源的数据访问。Microsoft SQL Server Analysis Services 按 XMLA 1.1 规范实现了 XMLA。
XML for Analysis (XMLA) 是一种基于简单对象访问协议 (SOAP) 的 XML 协议,它是专为对驻留在 Web 上的任何标准多维数据源的通用数据访问而设计的。XMLA 还消除了部署用于公开组件对象模型 (COM) 或 Microsoft .NET Framework 接口的客户端组件的需要。如果与服务器之间的往返通信要占用大量时间和资源,并且对数据源的有状态连接会限制服务器上的用户连接数,则 XMLA 会针对 Internet 进行优化。
注意:
1)上图是微软提供的,只是示意了微软自己的客户端开发组件对XMLA的使用。其他客户端(JAVA等)对XMLA的使用与之类似。
XMLA 开放标准介绍了以下两种常规访问方法:Discover 和 Execute。这些方法使用 XML 支持的松散耦合客户端和服务器体系结构处理有关 Analysis Services 实例的传入和传出信息。
尽管 XMLA 协议是针对 Web 应用程序进行优化的,但它还可用于面向 LAN 的应用程序。下列应用程序可从基于此 XML 的 API 中获益:
XMLA 是采用统一维度模型 (UDM) 方法的商业智能应用程序所使用的协议。
1. SQL Server Analysis Services 2000
2. SQL Server Analysis Services 2005,2008
2.1 Windows 5 / IIS6: Windows XP/Windows Server 2003
Configuring HTTP Access to SQL Server 2005 Analysis Services on Microsoft Windows Server 2003
Configuring HTTP Access to SQL Server 2005 Analysis Services on Microsoft Windows XP
Troubleshooting Analysis Services 2005 connectivity problems
Resolving Common Connectivity Issues in SQL Server 2005 Analysis Services Connectivity Scenarios
关于身份认证(也适用于SASS及Windows的其它版本):
如何解决SSAS + SSRS + WSS3.0 之间的Windows 集成验证问题
How to configure SQL Server 2005 Analysis Services to use Kerberos authentication
配置 IIS 以支持 Kerberos 和 NTLM 身份验证
2.2 Windows 6 / IIS7: Windows Server 2008/vista
Configuring HTTP Access to SQL Server 2008 Analysis Services on Microsoft Windows Server 2008
3. XMLA Over TCP/IP
Microsoft专利文献:Systems and methods of utilizing and expanding standard
其中,HTML封包是SOAP所依赖的传输协议,与XMLA之间相隔了SOAP一层,因此HTML封包与XMLA没有任何逻辑关系(实事上如本系列第四篇所述,微软自用的传输协议是TCP/IP之,还进一步的对SOAP封包进行了压缩及加密)。
SOAP封包与XMLA相邻,并被XMLA用来寄存维护会话的SESSION标头命令(四个命令)。没有指定SESSION标头的每一个命令都是一个独立的短暂会话,对于客户端保持原子化的事务特性。
在XMLA介绍一节我们知道XMLA具有两种方法,分别是Discover、Execute。
其中,Discover方法用于从 SSAS服务器及指定多维数据库实例检索结构性的信息,包括获取服务器的多维数据库Cube列表、Catalog、DataSource、Dimensions、Levels等。DisCover方法的结构如下:
<Discover>
<RequestType>…</RequestType>
<Restrictions>…</Restrictions>
<Properties>…</Properties>
</Discover>
Execute方法则携带Command参数,从指定的多维数据集获取查询数据。最常用Command是执行MDX语句查询的Statement命令(<Statement>MDX Query Clause</Statement>):
<Execute>
<Command>…</Command>
<Properties>…</Properties>
<Parameters>…</Parameters>
</Execute>
下表是一个完整的获取数据源列表的XMLA Discover请求,表的第一列各行分割了XMLA封包的各部分,第二列对应行说明了各部分的含义。
<?xml version=”1.0″ encoding=”UTF-8″?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Body>
soap表头
<Discover xmlns=”urn:schemas-microsoft-com:xml-analysis”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<RequestType>DISCOVER_DATASOURCES</RequestType>
<Restrictions>
<RestrictionList>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<Content>Data</Content>
</PropertyList>
</Properties>
</Discover>
XMLA方法
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
soap
需要特别注意的是XMLA访问SSAS 2000/2005/2008时存在着细微差异,高版本的SSAS对SOAP封包的属性要求更加严格,而在低版本中却可以做适当忽略。因此,如果在低版本的SSAS下可以运行的XMLA程序在高版本下无法获取结果的话,应该仔细查阅文档并跟踪比较,看看是否由于这个原因导致。
关于返回结果
如果知道完成特定任务的请求序列,关于结果的描述信息可以通过查找MSDN或XMLA SPEC可以轻松的获取。 因此,本系列不打算对XMLA的返回结果进行描述。
DISCOVER_DATASOURCES
返回结果
<Discover xmlns=”urn:schemas-microsoft-com:xml-analysis” SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<RequestType>DISCOVER_DATASOURCES</RequestType>
<Restrictions>
<RestrictionList>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<Content>Data</Content>
</PropertyList>
</Properties>
</Discover>
行集:包含了可用数据源DataSource的名称、属性、支持特性等。
DBSCHEMA_CATALOGS
返回结果
<Discover xmlns=”urn:schemas-microsoft-com:xml-analysis”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<RequestType>DBSCHEMA_CATALOGS</RequestType>
<Restrictions>
<RestrictionList>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<DataSourceInfo>http://www.JBean.cn</DataSourceInfo>
<Content>Data</Content>
</PropertyList>
</Properties>
</Discover>
行集:获取上一步返回的数据源JBean 中的目录(Catalog)的名称、描述、访问控制列表ACL等信息。
MDSCHEMA_CUBES
返回结果
<Discover xmlns=”urn:schemas-microsoft-com:xml-analysis”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<RequestType>MDSCHEMA_CUBES</RequestType>
<Restrictions>
<RestrictionList>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<DataSourceInfo>http://www.JBean.cn</DataSourceInfo>
<Catalog>Adventure Works DW 2008</Catalog>
<Format>Tabular</Format>
<Content>SchemaData</Content>
</PropertyList>
</Properties>
</Discover>
行集:返回指定数据源(JBean)、Catalog(Adventure Works DW 2008)下的CUBE列表;
接下来介绍的是获取一个CUBE(这里是任务一最后一步获取的Adventure Works多维数据集)的维度、层次及成员结构所需的基本步骤。
MDSCHEMA_DIMENSIONS
返回结果
<Discover xmlns=”urn:schemas-microsoft-com:xml-analysis”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<RequestType>MDSCHEMA_DIMENSIONS</RequestType>
<Restrictions>
<RestrictionList>
<CATALOG_NAME>Adventure Works DW 2008</CATALOG_NAME>
<CUBE_NAME>Adventure Works</CUBE_NAME>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<DataSourceInfo>http://www.JBean.cn</DataSourceInfo>
<Catalog>Adventure Works DW 2008</Catalog>
<Format>Tabular</Format>
<Content>SchemaData</Content>
</PropertyList>
</Properties>
</Discover>
行集:返回指定数据源(JBean)及Catalog(Adventure Works DW 2008)下的CUBE(Adventure Works)的所有维度列表;
MDSCHEMA_DIMENSIONS
返回结果
<Discover xmlns=”urn:schemas-microsoft-com:xml-analysis”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<RequestType>MDSCHEMA_LEVELS</RequestType>
<Restrictions>
<RestrictionList>
<CATALOG_NAME>Adventure Works DW 2008</CATALOG_NAME>
<CUBE_NAME>Adventure Works</CUBE_NAME>
<DIMENSION_UNIQUE_NAME>[Sales Channel]</DIMENSION_UNIQUE_NAME>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<DataSourceInfo>http://www.JBean.cn</DataSourceInfo>
<Catalog>Adventure Works DW 2008</Catalog>
<Format>Tabular</Format>
<Content>SchemaData</Content>
</PropertyList>
</Properties>
</Discover>
行集:返回指定数据源(JBean)、Catalog(Adventure Works DW 2008)、CUBE(Adventure Works)下的维度(Sales Channel)的所有层次列表;
MDSCHEMA_MEMBERS
返回结果
<Discover xmlns=”urn:schemas-microsoft-com:xml-analysis”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<RequestType>MDSCHEMA_MEMBERS</RequestType>
<Restrictions>
<RestrictionList>
<CATALOG_NAME>Adventure Works DW 2008</CATALOG_NAME>
<CUBE_NAME>Adventure Works</CUBE_NAME>
<LEVEL_UNIQUE_NAME>[Sales Channel].[Sales Channel].[(All)]</LEVEL_UNIQUE_NAME>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<DataSourceInfo>http://www.JBean.cn</DataSourceInfo>
<Catalog>Adventure Works DW 2008</Catalog>
<Format>Tabular</Format>
<Content>SchemaData</Content>
</PropertyList>
</Properties>
</Discover>
XMLA的Execute方法比较简单那,主要是执行 Command 元素中提供的 XMLA 命令(MDX Statement),并使用 XMLA Rowset 数据类型(行集:用于表格式结果的表达)或 XMLA MDDataSet 数据类型(多维数据集:用于多维结果的表达)返回任何结果数据。
EXECUTE COMMAND之Statement
返回结果
<Execute xmlns=”urn:schemas-microsoft-com:xml-analysis”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<Command>
<Statement>
SELECT
NON EMPTY {{{[Measures].[Internet Sales Amount]}}} ON COLUMNS,
NON EMPTY{{[Delivery Date].[Calendar].[Month].Members}} ON ROWS
FROM [Adventure Works]
</</Statement>
</</Command>
<Properties>
<PropertyList>
<DataSourceInfo>http://www.JBean.cn</DataSourceInfo>
<Catalog>Adventure Works DW 2008</Catalog>
<Format>Multidimensional</Format>
<Content>Data</Content>
<AxisFormat>TupleFormat</AxisFormat>
</PropertyList>
</Properties>
</</Execute>
在指定的数据源(JBean)及Catalog(Adventure Works DW 2008)下执行MDX语句并返回:
行集或多维数据集,MDX查询结果;
至此,本系列关于XMLA的介绍已经全部结束。本文将不断根据情况更新(最近更新请通过http//www.bi-professional.com获取)。正如前文所说,本系列的目的主要是帮助不熟悉的同仁沿着各章节逐步将XMLA应用起来,而直至本系列结束为止,才真正到了根据你的业务需求进行实际开发的起点。
在开发过程中如果需要进一步的了解,可以访问以下资源:
1)XMLA1.1规范:http://www.xmlforanalysis.com/
2)Microsoft XMLA 参考:http://technet.microsoft.com/zh-cn/library/ms186604.aspx
3)Analysis Services 数据访问接口:http://technet.microsoft.com/zh-cn/library/ms126037.aspx
4)多维表达式 (MDX) 参考:http://technet.microsoft.com/zh-cn/library/ms145506.aspx
5)Rex (waRehouse EXplorer)-An opensource java client for XMLA
6)SAP BI XMLA and XMLA Connector:http://help.sap.com/saphelp_nw04/Helpdata/EN/ba/e380e03c3a4dbf8cf082f0c910f9cf/frameset.htm
7)Oracle Essbase-XMLA Provider for Hyperion Essbase:http://www.oracle.com/technology/products/bi/essbase/provider-services.html
标签:
原文地址:http://www.cnblogs.com/martin-roger/p/5603148.html