XML for Analysis(XMLA)开发详解
Posted 空余恨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML for Analysis(XMLA)开发详解相关的知识,希望对你有一定的参考价值。
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的开发过程。这些内容虽然在手册中多有提及,但内容很零散,而且编排是手册的格式,篇幅长不易快速上手。因此提供一个简单的指引也许会有帮助。
一、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 实例的传入和传出信息。
- Discover 方法可从 Web 服务获取信息和元数据。此信息可包含可用数据源的列表以及任何数据源访问接口的相关信息。属性可定义并定形从数据源中获取的数据。Discover 方法是定义多种类型的信息的常用方法,客户端应用程序可能需要从 Analysis Services 实例的数据源中获取这些信息。属性和泛型接口可提供可扩展性,而无需重写客户端应用程序中的现有函数。
- Execute 方法使应用程序能够对 XMLA 数据源运行特定于访问接口的命令。
尽管 XMLA 协议是针对 Web 应用程序进行优化的,但它还可用于面向 LAN 的应用程序。下列应用程序可从基于此 XML 的 API 中获益:
- 需要在客户端与服务器之间使用灵活技术的客户端/服务器应用程序
- 针对多个操作系统的客户端/服务器应用程序
- 不需要明显状态以便增加服务器容量的客户端
1.2 、XMLA 和统一维度模型
XMLA 是采用统一维度模型 (UDM) 方法的商业智能应用程序所使用的协议。
1.3、小结
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
XML/A over TCP/IP作为SQl Server Analysis Service 2005/2008自身客户端(SQL Server Management Studio/Business Intelligence Development Studio)和服务器端通讯的基本协议,却无法直接在我们第三方开发中使用。 因为XML/A over TCP/IP是微软的保留曲目,是专利保护的技术,目前只供自己使用。本文作者对该协议进行了详细分析,感兴趣的可以看看。但实际研发中,相当长一段时间我们如果想采用XML/A都必须通过XML/A over HTTP,配合IIS扩展使用。 对技术细节感兴趣同仁,不防通过Google专利搜索工具(http://www.google.com/patents)获取关于XML/A over TCP/IP的专利全文学习.
其中,html封包是SOAP所依赖的传输协议,与XMLA之间相隔了SOAP一层,因此HTML封包与XMLA没有任何逻辑关系(实事上如本系列第四篇所述,微软自用的传输协议是TCP/IP之,还进一步的对SOAP封包进行了压缩及加密)。
SOAP封包与XMLA相邻,并被XMLA用来寄存维护会话的SESSION标头命令(四个命令)。没有指定SESSION标头的每一个命令都是一个独立的短暂会话,对于客户端保持原子化的事务特性。
XMLA方法的组成及结构
在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 SOAP请求实例(已去掉HTTP封包)
下表是一个完整的获取数据源列表的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的返回结果进行描述。
步骤示例:
Step1:获取服务器或 Web 服务上可用的 XML for Analysis (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的名称、属性、支持特性等。
Step2:返回指定数据源所对应的数据库中的目录(Catalog)列表;
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等信息。
Step3:返回指定数据源、Catalog下多维数据集(CUBE)列表;
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多维数据集)的维度、层次及成员结构所需的基本步骤。
步骤示例:
Step1:获取指定CUBE的维度(Dimension)列表;
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)的所有维度列表;
Step2:获取指定维度(Dimension)的默认层次(Level)列表;
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)的所有层次列表;
Step3:获取指定层次(Level)下的成员(Member)列表;
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方法解析及实例
XMLA的Execute方法比较简单那,主要是执行 Command 元素中提供的 XMLA 命令(MDX Statement),并使用 XMLA Rowset 数据类型(行集:用于表格式结果的表达)或 XMLA MDDataSet 数据类型(多维数据集:用于多维结果的表达)返回任何结果数据。
EXECUTE方法示例:
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
以上是关于XML for Analysis(XMLA)开发详解的主要内容,如果未能解决你的问题,请参考以下文章
什么是探索性数据分析EDA(Exploratory Data Analysis)?,探索性数据分析EDA(Exploratory Data Analysis)对机器学习有是意义?探索性数据分析EDA详
从 SSAS 网关刷新时出现“EffectiveUserName' XML for Analysis 属性无效”错误
SSAS XMLA DISCOVER:如何获取 SSAS 数据库中的角色列表