ADOMD.NET 9 简记---ADOMDConnection
曾发过一个随笔,里面有其对象层次结构,很明了,是围绕多维数据集的.
首先,开发的时候需要添加一个引用: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的理解下,定义的维度成员都可以在这个集合下找到,查看这些值,很容易发现不同的是维度前面有一个标记$.通过这个方法取一个数据库下的所有立方体会造成干扰,在这里可以通过一个方法判断,比如:
{
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的容器中.
{
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
---------------------------------------------------------------
aspnetx的BI笔记系列索引:
使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能
---------------------------------------------------------------