ADOMD.net简记

首先,开发的时候需要添加一个引用: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值