Tabular Model下的ADOMD.NET

来源:互联网 发布:编辑书的软件 编辑:程序博客网 时间:2024/04/29 23:51

ADOMD.NET是一套对象架构体系,它包含需要向SSAS数据库做访问的一切支持的对象和方法。很多微软官方以及第三方的SSAS客户端应用都是通过这个对象来操作数据。

多维模式的ADOMD.NET在我以前的随笔中做过介绍,这一片主要看看在Tabular Model模式下这个对象架构是否有什么不同。

在SQL Server 2012的Tabular Model跟传统的多维模式有很大不同,比如它们不能在同一个分析服务实例中,如果抛开Tabular Model的Direct Query和多维数据集的ROLAP模式的话,它们对待数据的方式也不相同,Tabular Model的数据是存储在内容中,而多维数据集是把数据聚合在硬盘上的物理文件中。但是,从用户终端这个角度来说,它们都是相同的。

上图为Tabular Model模式。

上图为多维模式。

 

那么,在编程模型中,Tabular Model跟多维模式有什么区别呢?

首先我们再次来观察一下Adomd.net Client Object架构。

Adomd.net的架构跟ADO.NET的架构很像,都有对应的Connection和Command对象。由于本身返回的数据结构不同,在ADO.NET下可以选择用DataReader或者DataSet来接收数据,而在Adomd.net下对应DataSet的是CellSet,它的结构相对来说更复杂一些,关于CellSet 也可以参考我的这篇随笔:

重新整理Cellset转Datatable

http://www.cnblogs.com/aspnetx/archive/2010/11/12/1875469.html

在这个架构图中,我们可以看到从AdomdConnection对象下就可以检索到分析服务数据库的结构。

首先从Connection对象的CubeDef对象可以读取到各个Cude的信息,需要注意的是需要用CubeType属性判断一下,因为维度在这里也会作为一个CubeDef出现。还有一点就是如果一个Cube派生出了多个透视,那么在这里也会被看作是一个CubeDef存在。

检索到Cube对象然后就可以继续检索下边的Dimension和Measure。

Measure对象相对比较简单一些,只是,我们在客户端程序里看到Measure会被分类到不同的文件夹中:

但是在Measures属性直接就是Measure对象,Folder是通过Measure实例的DisplayFolder标识的。

比较复杂的是Dimension对象。

提到Dimension对象不得不提的是其下边的Hierarchy和Level对象。如果把它们翻译成中文,恐怕看不出什么区别,所以这也是我当初学习的时候比较迷茫的两个概念。

但是通过上面的Adomd.net对象架构可以看出,Dimension对象包含Hierarchy对象,Hierarchy对象又是包含Level对象的。

关于Hierarchy对象在Adomd.net对象架构下跟我们认识中的Hierarchy对象可能有所不同。

在维度设计界面中,带有层次结构的才被划分到Hierarchy下面,而其它的都归属在Attributes下面。但是在Adomd.net对象的Dimension下,Attributes全部归属到Hierarchy对象,并且只有一个Level。

以上就是关于Adomd.net对象关于SSAS数据库检索的步骤,至于多维模式和Tabular Model是否通用,我们可以写一个简单的程序来做下测试。

这里本打算写一个Console程序来做测试,但是由于检索出的信息会很多不便于浏览,所以写一个简单的ASP.NET程序来做测试。

下面直接贴核心代码:

代码是截屏,此篇结尾会找到这个项目的下载。

代码主要是根据Adomd.net下Connection的对象层次结构依次做枚举,然后添加到ASP.NET页面的TreeView对象之下。

首先修改Connection对象让它连接一个多维模式的SSAS数据库:

AdomdConnection conn = new AdomdConnection(@"Provider=MSOLAP.3;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=AdventureWorksDW2012Multidimensional-EE;Data Source=.");

conn.Open();

运行结果:

除了Adventure Works之外,其它的都是透视或者数据挖掘模型。展开Measures或者Dimensions,可以看到下面的结构:

接下来将Connection对象连接到一个Tabular Model模式的SSAS数据库下:

AdomdConnection conn = new AdomdConnection(@"Provider=MSOLAP.3;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=AdventureWorks Tabular Model SQL 2012;Data Source=.\MSBI");

conn.Open();

以上分析服务实例中,默认的实例是多维模式的SSAS数据库,MSBI实例是Tabular Model模式的SSAS模式数据库。

下面来看运行效果:

在Excel里看到的一样,代码同样能够检索得到Tabular Model模式下的结构。

截至到目前有一样工具比较特殊,就是PowerView,在微软早先发布的SQL Server中,PowerView只支持连接到PowerPivot和Tabular Model数据库,随着后续SQL Server补丁的发布,在Sharepoint下的PowerView也支持了多维模式的SSAS数据库,但是在Excel下的仍不支持。我觉得这个可能还是微软的商业行为或者是开发进度相关,从微软的分析服务官方小组的博客上我们也可以看到,后续的Excel中确实也会支持多维模式的SSAS数据库,然而这只是时间的问题,由于SQL Server 2014就要发布了,所以是否这个在SQL Server 2012中会被支持,目前还无法确定。

 

以上就是ADOMD.NET对象架构对于Tabular Model的介绍,可以看得出同样的对象架构在多维模式和Tabular Model模式下都是通用的。

顺便提一下,ADOMD.NET跟ADO.NET不同的是,ADOMD.NET还有一个对应的AMO的概念,AMO对象架构下也可以检索出SSAS数据库的结构,但是AMO下主要是对架构的枚举,在每一个对象下都有比如Process这样对架构进行处理的方法。而在ADO.NET下这些操作比如检索数据库下有哪些表和视图,都是通过SQL语句查询系统表实现的。

 

附:示例代码下载。

原创粉丝点击