Tabular Model下的ADOMD.NET
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语句查询系统表实现的。
附:示例代码下载。
Tabular Model下的ADOMD.NET的更多相关文章
- 【转载】Analysis Service Tabular Model #003 Multidimensional Model VS Tabular Model 我们该如何选择?
由于Multidimensional Model 和 Tabular Model 并不能互相转换, 所以在项目之初就应该要考虑好选择哪一种模型进行开发. 以下只是一些建议: Licensing 许可和 ...
- 【转载】Analysis Service Tabular Model #002 Analysis services 的结构:一种产品 两个模型
Analysis Service 2012 Architecture – One Product, Two Models 在之前SQL Server 2008 R2 版本中的分析服务实际上只有一个版本 ...
- tensorflow/model下的各个参数的理解
首先,这个对应的proto就是 然后config里面的image_resizer等等 就是proto里面的image_resizer 等等,对应的参数可以在proto里面寻找解释和默认值以及类型 再比 ...
- Azure ARM (10) ARM模式下的虚拟机和Classic Model虚拟机的区别
<Windows Azure Platform 系列文章目录> 本文内容比较多,请大家仔细阅读,谢谢! 请读者注意,在Azure ARM平台,有两种虚拟机模式:经典虚拟机和ARM虚拟机 A ...
- SQL Server 2014新特性:五个关键点带你了解Excel下的Data Explorer
SQL Server 2014新特性:五个关键点带你了解Excel下的Data Explorer Data Explorer是即将发布的SQL Server 2014里的一个新特性,借助这个特性讲使企 ...
- 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍
在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...
- Caffe框架下的图像回归测试
Caffe框架下的图像回归测试 参考资料: 1. http://stackoverflow.com/questions/33766689/caffe-hdf5-pre-processing 2. ht ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- sencha touch之模型(model)
模型的实例相当于数据库中表的一条记录. 一般模型在\app\model下创建,而且必须遵守类的命名规则,也就是可以根据类名找到模型的定义文件. 所有模型类都要从Ext.data.Model或Ext.d ...
随机推荐
- java78_c
import java.util.*; public class Main { public static void main(String args[]){ Scanner cin=new Scan ...
- svn下目录说明
Branch 目录 : 该SVN 的Branch目录下存放的是:跟工程项目相关的各个工程版本分支.该目录下面的版本分支可能会被修改合并.不是稳定的版本. Document 目录:该SVN 的Docum ...
- java的ArrayList使用方法
在第N个数据后面添加一个数据 用法: 在第1个元素后面添加E list.add(1, "E");
- 2.4---把链表划分为两部分(CC150)
注意,题目要求要保持两部分的相对顺序,所以,用交换是不行的. import java.util.HashSet; import java.util.Set; class ListNode{ int v ...
- 傅里叶变换库FFTW的安装配置(VS2010)
FFTW是用来计算一维或者多维的离散傅里叶变换,输入可以为实数序列也可以为复数序列的C语言的子函数库,FFTW是免费软件,是作为fft函数库的各种应用的上佳选择. 1. 从网站http://www.f ...
- Python之队列queue模块使用 常见问题与用法
python 中,队列是线程间最常用的交换数据的形式.queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 1. 阻塞模式 import queue q = queu ...
- 第十天 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)
1.多进程实现方式(类似于多线程) import multiprocessing import time,threading def thread_run():#定义一个线程函数 print(&quo ...
- IDEA Error:java: 未结束的字符串文字
首页 > 编程交流 > 基础篇 > IDEA Error:java: 未结束的字符串文字 201601-25 IDEA Error:java: 未结束的字符串文字 IDEA开发, ...
- python判断文件和文件夹是否存在
import osos.path.isfile('test.txt') #如果不存在就返回Falseos.path.exists(directory) #如果目录或文件不存在就返回False
- java切换VPN让你像幽灵一样出现在全国各地
在很多情况下,有些网络应用的需求会要求模拟人在不同地区访问网站和应用.因而切换IP也就应运而生了,然而IP作为一种稀缺资源不是随便可以获得的.因而会想到应用程序切换VPN来达到全国不同地区访问网络.因 ...