专注ASP.NET和SQLServer2008 BI&GIS

骂别人不革命,便是革命者,则自己不做事,而骂别人的事做得不好,自然便是更做事者。
若与此辈理论,可以被牵连到白费唇舌,一事无成,也就是白活一世,于己于人,都无益处。
我现在得了妙法,是谣言不辩,诬蔑不洗,只管自己做事。——鲁迅1934年6月21日信
posts - 254, comments - 1235, trackbacks - 28, articles - 6
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

ADOMD.NET 9 简记---ADOMDConnection

Posted on 2007-05-22 16:20 aspnetx 阅读(3010) 评论(23)  编辑 收藏 所属分类: (BI)商业智能

发过一个随笔,里面有其对象层次结构,很明了,是围绕多维数据集的.

首先,开发的时候需要添加一个引用:Microsoft.AnalysisServices.AdomdClient

以下先主要围绕ADOMDConnection对象进行描述.

其中有一些方法和属性,简要记之.很多结构基本上可以按照ADO.NET的方式来理解.

ADOMDConnection对象:

此Connection和ADO以及ADO.NET的很类似,主要负责与目标库的连接.但是有一个比较不同的地方,就是从这个对象众可以获得连接到的数据库下的所有立方体和维度的信息,这一点与我们通常连接数据库的对象有不同,记得看过nbear的代码读取一个数据库下的库表结构都是取自系统表,而无法从Connection对象直接获得.

连接字符串,大体可以参照如下的格式:

[Analysis Service 2005版本]

Provider=MSOLAP.3;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Adventure Works DW;Data Source=http://127.0.0.1

[Analysis Service 2000版本]

Provider=MSOLAP;Initial Catalog=Food Mart 2000;Data Source=http://127.0.0.1

说明:通常来说访问多维数据集都是通过IIS,如果是在本机做测试或者开发的话,直接写127.0.0.1也可以,以下是各版本的通过http远程访问多维数据集的方法:

[2000]http://support.microsoft.com/kb/279489/en-us

INF: How to Connect to Analysis Server 2000 By Using HTTP Connection

英文版本,可以尝试微软提供的中文非人工介入式的翻译,读起来很别扭

[2005]http://www.microsoft.com/china/technet/prodtechnol/sql/2005/httpasws.mspx

在 Microsoft Windows Server 2003 上配置对 SQL Server 2005 Analysis Services 的 HTTP 访问

中文版本,很详细,虽然麻烦了点不过多配几次就记住了

查看ADOMDConnection的成员,很容易找到如下的一个属性:

Cubes 这个属性返回类型为CubeCollection的一个对象集合,其成员是CubeDef

在ADOMD.NET的理解下,定义的维度成员都可以在这个集合下找到,查看这些值,很容易发现不同的是维度前面有一个标记$.通过这个方法取一个数据库下的所有立方体会造成干扰,在这里可以通过一个方法判断,比如:

foreach(CubeDef mycube in mycubes)

{

if (mycube.Type==CubeType.Cube)

{

//是一个传说中的立方体Cube

}


if(mycube.Type==CubeType.Dimension)

{

//是立方体下定义的一个维度

}


}

其中CubeDef就是刚才所提到的CubeCollection的成员,代表一个立方体对象,通过foreach等方法可以把其枚举出来,然后通过CubeDef的CubeType属性,能获得其类型,这些类型在一个枚举类型CubeType中,有三个成员:Cube,Dimension,Unknown.

通常来说,不同的透视在ADOMD.NET下就是一个不同的CubeDef,所以这也很容易解释为什么一个多维数据集下会有那么多的立方体.

在一个CubeDef对象下,有如下两个属性来获得这一立方体下所属的维度和度量值:

Dimensions,Measures

返回类型分别是DimensionCollection和MeasureCollection,其成员也分别是Dimension对象和Measure对象,分别代表这个立方体下所拥有的度量值和维度.

Dimension对象和Measure对象有两个方法常用:Caption和UniqueName.通常来说需要获得一个维度下的所有度量值和维度,这两个属性就足够了.但有些时候把UniqueName作为动态构建MDX语句的部分会出现问题.

比如,Dimension对象,我们都知道一个维度下面很可能分很多的层次,对于有层次的维度直接把其作为构建MDX语句的一部分会提示错误,需要指明是这一层次下的具体哪一个,这些层次在ADOMD.NET对象中对应的就是Hierarchies属性,用来返回维度下的层次集合HierarchyCollection,而且其成员也是Hierarchy,对应其中的一个层次.

例如:对于时间维度,通常都会有如下的层次:年,季,月,日等.在这个时间维度中,Dimension对象"时间"其下有五个Hierarchy,它们就是年,季,月,日,当然还有时间其本身.根据Hierarchy的UniqueName属性,就可以得到其可作为动态构建MDX语句的引用.

在如下代码中,当读取到立方体中的一个维度之后,首先把维度类型为Measure的去掉,然后枚举每个维度下的所有层次,把其列出来,创建一个ListItem元素把其加入到类型为ListBox的容器中.

 

foreach (Dimension mydim in mycubes[m].Dimensions)
{
if (mydim.DimensionType != DimensionTypeEnum.Measure)
{
foreach (Hierarchy myh in mydim.Hierarchies)
{
ListItem li 
= new ListItem();
li.Text 
= myh.Caption;
li.Value 
= myh.UniqueName;
lbDims.Items.Add(li);
}

}

}

此外还有KPI等属性,结构和以上的描述类似,可以参考联机丛书中的内容.

以上相关对象资料可以查看SQLServer2005联机丛书.我在参考的时候,可能是安装的版本比较老,2005年12月的,所以,按照多维数据集的结构一层一层往下看的时候,发现其描述资料只精确到Hierarchy,从这层次往下就很难找到类似示例代码这样的待遇了,不过可以按照对多维数据集的理解再往下摸索,应该是没什么问题的.

 

示例程序的一点说明:

环境:VS2005+SQLServer2005 Analysis Service,最好已经部署了示例的Adventure Works DW库.还需要asp.net ajax扩展.

程序描述:一个简单的多维数据集连接查看并且简单的分析程序,支持2000和2005两个版本,第一页指定连接信息后,第二页就可以查看其下的维度和度量值以及立方体.在指定了一个度量值和分别在行上和列上添加一个维度后,点下一步,查看结果.

程序只是闲时写的并且是不断补充进去的,代码写的很丑陋所以请见谅,但是里面用到了文中所描述的信息.

MDX语句是简单的根据选取的度量值,行轴和列轴的信息产生的.简单测试了下2005下自带的多维数据集大部分都可以通过.

入口点的页面是ConnectCube.aspx

[单击这里下载示例程序]

这个程序以后我会不断的完善并且发布,并且也欢迎有兴趣的朋友和我一起来完善这个程序.


相关资源下载页面:
ADOMD.NET(包含在2007年2月份的功能包中)
http://www.microsoft.com/downloads/details.aspx?familyid=50B97994-8453-4998-8226-FA42EC403D17&displaylang=zh-cn
SQLServer2005联机丛书(到目前为止我能找到的最新的版本,通常捆绑在安装文件里的都是2005年的,所以建议大家下载)
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=be6a2c5d-00df-4220-b133-29c1e0b6585f

Feedback

#1楼    回复  引用    

2007-05-22 17:20 by a [未注册用户]
9959

#2楼    回复  引用    

2007-05-22 23:32 by 热门单曲 [未注册用户]
多谢楼主分享 顶一个

#3楼 [楼主]   回复  引用  查看    

2007-05-23 08:25 by aspnetx      
@热门单曲
多谢支持

#4楼    回复  引用    

2007-05-23 09:40 by flysky [未注册用户]
多谢楼主!但好象文中第二个链接所给的文章在MSDN无法找到.
代码已经下载看了,用这种方法实际上就是根据一个MDX语句来获cellset,然后将该cellset转换为datatable,再将datatable显示在GridView中。我现在要做的是一个能像Dundas那样可以任意拖动下钻等操作的展示。但这样的话就的自己去写控件了。我不知道在Web方式下面OWC能否实现这样的供能,博主是否有Web下面使用OWC的示例代码,能否给我传一份?谢谢了!

#5楼 [楼主]   回复  引用  查看    

2007-05-23 09:52 by aspnetx      
@flysky
拖动我觉得可以用其它的方法来代替,下钻之类的操作我觉得实现起来也不是很难,呵呵,一步一步来.
第二个链接确实有问题,damns the LiveWriter,马上修正

owc是可以实现的,建议参考frontpage自动生成的代码,还是很容易理解的

#6楼    回复  引用    

2007-05-23 11:26 by blogtalker [未注册用户]
good............

#7楼 [楼主]   回复  引用  查看    

2007-05-23 13:38 by aspnetx      
@blogtalker
thanks............

#8楼    回复  引用    

2007-05-23 16:13 by flysky [未注册用户]
博主,你说的“建议参考frontpage自动生成的代码“,是什么意思?能否详细一点?谢谢!

#9楼 [楼主]   回复  引用  查看    

2007-05-23 16:20 by aspnetx      
@flysky
比如frontpage2003
插入-Web组件...-电子表格和图表-Office数据透视表
然后其会为你生成标记,传说中的声明式编程

#10楼    回复  引用    

2007-08-07 00:31 by 初学者 [未注册用户]
最近导师也是叫我利用analysis services来做一个OLAP的展示层,通过拖拽等实现简单的分析。希望能和楼主共同探讨。加我QQ:
275381545,有没有关于这方面的QQ群啊?

#11楼    回复  引用    

2007-08-07 01:21 by snowPKU [未注册用户]
搂主,有个问题请教一下,我下载了示例程序之后,把它放在C:\Inetpub\wwwroot之下,通过IIS来运行,只能进到connectCube.aspx页面,我用的是analysis 2000,输入数据库名:FoodMart 2000之后,点下一步没有反应,是怎么回事?
搂主的运行环境是什么?

#12楼 [楼主]   回复  引用  查看    

2007-08-07 08:36 by aspnetx      
@初学者
哦,和我的qq联系吧
拖拽的我现在没有怎么实现,主要是不太熟悉javascript

#13楼 [楼主]   回复  引用  查看    

2007-08-07 08:38 by aspnetx      
@snowPKU
可能是缺少asp.net ajax的环境,在www.asp.net下载一个就成

#14楼    回复  引用    

2007-08-07 13:46 by snowPKU [未注册用户]
我装了asp.net ajax扩展了,不过没装ajax的toolkits,这个会有影响吗?
VS2005 我没有装J#,不过我看你那都是用的C#写的吧,这应该没有关系的吧.
我加你的QQ了,通过验证哦。

#15楼 [楼主]   回复  引用  查看    

2007-08-07 20:10 by aspnetx      
@snowPKU
你好,我的qq并没有收到你的请求
我的qq写在左面了
可以qq里细聊

#16楼    回复  引用    

2007-08-07 23:24 by snowPKU [未注册用户]
你的QQ是:63036666 吧 我给你发请求了。等你通过验证。
你的msn我也加了。
有问题要和你一起探讨呢。

#17楼    回复  引用  查看    

2008-01-07 21:01 by 春申      
赞一个~~~

#18楼    回复  引用  查看    

2008-02-22 14:45 by 春申      
楼主好,
我按照地址
http://www.microsoft.com/china/technet/prodtechnol/sql/2005/httpasws.mspx
描述的步骤完成了操作,可是仍然无法使用
http://ServerIP/olap/msmdpump.dll
来访问cube,远程不可以,本地也不可以。
请教一下还有哪些注意事项呢?

#19楼 [楼主]   回复  引用  查看    

2008-02-22 18:48 by aspnetx      
@春申
你好,如果可以的话请发送系统提示的错误信息给我

#20楼    回复  引用  查看    

2008-02-25 10:19 by 春申      
卫东你好!
我使用SSAS连接,报如下错误信息:
Cannot connect to http://serverIP/olap/msmdpump.dll
Additional information:
-> The connection either timed out or was lost.(Microsoft.AnalysisServices.AdomdClient)
-> The underlying connection was closed: An unexpected error occurred on a receive. (System)
-> Unable to read data from the transport connection: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。,(System)
-> 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。,(System)

#21楼    回复  引用  查看    

2008-06-18 17:53 by xuanfeng      
辛苦了,谢谢你的分亨!
跟你咨询个问题,你知道哪里有ADOMD.NET C#版的SDK吗?
我要微软官方网上下载的VB的

#22楼 [楼主]   回复  引用  查看    

2008-06-18 21:56 by aspnetx      
@xuanfeng
你好,哪里有下载我不是很清楚了,印象中是在装完adomd.net之后在sqlserver2005的联机丛书当中就可以找到相关的资料了.
另外不太建议你依赖这个联机丛书,感觉很多深层次的东西写得都很模糊,甚至就是简单的接口说明,c#的如此,更不用指望vb.net的了.

#23楼    回复  引用  查看    

2008-06-19 21:29 by xuanfeng      
谢谢

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-10-21 14:53 编辑过


相关链接: