ADOMDNET总体介绍以及實例

 ADOMD.NET:ADOMD.NET是开发过程中最重要的部分,与AS的交互都是通过ADOMD.NET来完成的。ADOMD.NET跟其他的.NET Framework Data Providers 一样,提供应用程序与数据源之间的桥梁作用。不同的是,与ADOMD.NET对应的是多维数据,ADOMD.NET提供比其他Data Providers更加强大的功能。

1.      AdomdConnection,AdomdCommand,AdomdDataReader,和 AdomdDataAdapter 对象是ADOMD.NET的核心元素。AdomdDataReader对象提供连接状态下的从多维数据源读取数据的快速、高效的方法;AdomdDataReader对象实现了System.Data 命名空间的下的IDbDataReader接口,所以任何可绑定于标准.NET Framework Data Providers获取数据的请求均可以用于AdomdDataReader。AdomdDataAdapter可用于转移CellSet,特别是用Select命令获取数据的时候。

2.      几个常用的ADOMD.NET对象:

Ø        Axies,即所谓的轴,一个CellSet最多可容纳128个轴,体现在mdx表达式中就是   ON COLUMNS(0),ON  ROWS(1),没有别称的可用直接用数字(0-127)表示。目前淘金者中仅用到轴0、轴1,所遵循的mdx表达式也仅仅构建的2个轴。Axis轴本质上是用于组织CellSet中众多Cells的有规则、合理的Tuples元组的集合。

Ø        Cell,Cellset集合中的某个单元,一般对应的是某个值Value,单是并非CellSet中的每个Cell都有对应的数据。一个Cell就是某个CellSet中所有轴(包括切片轴)的唯一的逻辑交叉点,这个交叉点在事实表中可能没有对应的记录,表现这个Cell的Value值为空。

Ø        CellProperty,是CellSet中各个Cell的属性,一般说来,CellProperty包含丰富的信息,比如CellOrdinal,CELLVALUE,FORMATTED_VALUE等。

Ø        CellSet,简单说,CellSet就是AdomdCommand执行Execute或者ExecuteCellset方法后返回的结果集合,返回的结果集取决于mdx表达式,往往包含不连续数据点的集合。

Ø        CubeDef,Cube由Measures和Dimensions组成,CubeDef仅仅给出Cube的元数据,无法从CubeDef获得单元数据;相反,CuebDef提供从客户端获取给定Cube的元数据、Dimensions、Measures、命名集的一种机制。AdomdConnection对象连接后,可能含有多个Catalog,每个 Catalog含多个CuebDef。

Ø        Dimension,维度,每个CubeDef下含多个Dimension,每个Dimension是描述问题的一个角度,多个Dimension构成了一个多维的CubeDef。这里顺带说下UDM(Unified Dimension Model统一维度模型),各维度下的层次可以是层次递进、逐级深入的,也可以类似属性的直接引用。Dimension是Hierarchy的集合。

Ø        Hierarchy,Hierarchy是成员的集合,这些成员的位置是彼此相对的,在AS2000中,Hierarchy都是单独的,即每个Dimension都只存在Hierarchy[0],CellSet中也可直接到Hierarchy这一级。这个在AS2005有了改进,Dimension 下可含有多个Hierarchy,真正实现了层次化。Hierarchy下成员是分Level的,从上往下呈金字塔式结构,越往塔底的成员越详细。Hierarchy分父子Hierarchy和用户Hierarchy,可用HierarchyOrigin属性来区分。

Ø        Level,级别,Level包含在Hierarchy下,一个Hierarchy可以有一个或者多个Level,Level才是真正体现Hierarchy的层次的东西,更加具有实际意义。微软的SQL Server2005 Book Online是如下评论Level的,“在SSAS中,Dimensions是相当复杂的结构,包含组织成Levels的成员,这些Levels进而组织成Hierarchy”。比如时间维度下,Hierarchy下的Level就可以有年、季度、月份等Level,这些Level下包含各自的成员。需要特别强调的是,可用Level.GetMembers()方法获得该级别下的所有成员。这个在程序中需要经常用到。

Ø        Measure,在Cube中,Measure是用作度量的元数据,跟Dimension同一个级别,直接在Cube下,Measure是一个特殊的Dimension,因为其包含的具体的表现值,是Cube中重点要考察的一个角度,如果没有Measure,其他的普通维度也将失去意义。

Ø        Member,Member是Hierarchy下重要的项,这个项展现了底层关系数据库的一个或者多个记录,成员是CellSet结果集中较为重要的部分,很多值信息需要通过Menber丰富的成员属性来辅助说明,也只有在特定的信息下这个Member才真正体现其价值。Member可从 hierarchy, tuple, level获得。从Member可获得的信息取决于其父成员(或者父成员集合)。

C#中使用ADOMD.net的示例(摘抄)
 
ado 的

OleDbConnection Myconn = new OleDbConnection(ConfigurationSettings.AppSettings["sql_olap"]);
OleDbCommand Mycommand = Myconn.CreateCommand();
Myconn.Open();
string nUserCount="";
string strMdx = "select {[Measures].[Unit Sales]} on columns,{[Time].[1997]} on rows from [Sales]";
//string strMdx = "select {[Measures].[Unit Sales]} on columns, order(except([Promotion Media].[Media Type].members,{[Promotion Media].[Media Type].[No Media]}),[Measures].[Unit Sales],DESC) on rows from Sales";
Mycommand.CommandText = strMdx;
OleDbDataReader myReader = Mycommand.ExecuteReader();
while(myReader.Read())
{
nUserCount = nUserCount + myReader.GetValue(0).ToString()+"--"+myReader.GetValue(1).ToString()+" ";
}
myReader.Close();
Myconn.Close();
return nUserCount;
?
ADO MD 范例
目录

使用如下范例主题可以了解部分 ADO MD 编程元素。

连接多维据源

Connection 范例演示如何连接 OLAP(联机分析过程)数据库服务器或本地 OLAP 立方文件。

访问 ADO MD 集合

CubeDef 范例演示如何显示 Catalog 中 CubeDef 的维的名称。

获得单元集

单元集范例演示如何执行返回单元集的 MDX 查询。该范例显示单元集中成员的标题和单元的格式化值。

访问单元

单元范例演示检索指定单元的三种方法:通过序号位置、通过轴数值位置和通过成员名称。

Connection 范例
目录

如下代码演示如何使用连接字符串设置 ActiveConnection 属性。该代码假定在名为 Servername 的 OLAP 服务器上有一个名为 Bob Video Store 的数据源,并且使用的是 MSOLAP 数据提供者。

Dim cat As New ADOMD.Catalog
cat.ActiveConnection = "Data Source=Servername;" + _
   "Initial Catalog=Bobs Video Store;Provider=msolap;"

如下代码也演示如何使用连接字符串设置 ActiveConnection 属性。但是,该代码使用 MSOLAP 数据提供者连接到本地立方文件,而不是连接到名为 Servername 的 OLAPT 服务器。

Dim cat As New ADOMD.Catalog
cat.ActiveConnection = _
"Location=C:/MSDASDK/samples/oledb/olap/data/BobsVid.cub;" + _
"Provider=msolap;"

如下代码演示如何将 ActiveConnection 属性设置为标准的ADO Connection 对象。要使用 ADO Connection 对象,必须在工程中引用 ADO 类型库。

Dim cnn??As New ADODB.Connection
Dim cat??As New ADOMD.Catalog
Cnn.Open "Data Source=Servername;" + _
   "Initial Catalog=Bobs Video Store;Provider=msolap;"
Set cat.ActiveConnection = cnn

注意???在将 ActiveConnection 属性设置为 Connection 对象时,记住要使用 Set 关键字。如果没有使用 Set 关键词,其结果是将 ActiveConnection 属性设置成 Connection 的默认属性:ConnectionString。代码将会工作,但将创建与数据源的其他连接,最终得到相反的结果。

CubeDef 范例
目录

如下代码范例演示如何访问 CubeDefs 和 Dimensions 集合。该范例打印立方中每个维的名称。该代码假定在名为 Servername 的 OLAP 服务器上存在名为 Bobs Video Store 的数据源。

Dim cat      As New ADOMD.Catalog
Dim cdf      As ADOMD.CubeDef
Dim I         As Integer
cat.ActiveConnection = "Data Source=Servername;" + _
   "Initial Catalog=Bobs Video Store;Provider=msolap;"
Set cdf = cat.CubeDefs("Bobs Video Store")
For i = 0 To cdf.Dimensions.Count - 1
   Debug.Print cdf.Dimensions(i).Name
Next
Cellset 范例目录如下代码演示如何打开 Cellset、打印每个位置的 Members 的标题和打印 Cell 的格式化值。该代码假定在名为 Servername 的 OLAP 服务器上存在名为 Bobs Video Store 的数据源。Dim cat      As New ADOMD.Catalog
Dim cst      As New ADOMD.Cellset
Dim axs      As ADOMD.Axis
Dim I         As Integer
Dim j         As Integer
cat.ActiveConnection = "Data Source=Servername;" + _
   "Initial Catalog=Bobs Video Store;Provider=msolap;"
cst.Source = "SELECT [Product Category].MEMBERS ON ROWS," + _
                     "[Store State].MEMBERS ON COLUMNS" + _
               "FROM??[Bobs Video Store]" + _
               "WHERE?([Quantity])"
Set cst.ActiveConnection = cat.ActiveConnection
cst.Open
For i = 0 To cst.Axes(0).Positions.Count - 1
   Debug.Print cst.Axes(0).Positions(i).Members(0).Caption & " ";
   Set axs = cst.Axes(1)
   For j = 0 To axs.Positions.Count - 1
      Debug.Print "???? " & axs.Positions(j).Members(0).Caption & _
         " " & cst(i, j).FormattedValue
   Next
Next
cst.Close?Cell 范例目录如下代码演示访问指定 Cell 的三个方法。该代码假定在 OLAP 服务器上存在名为 Bobs Video Store 的数据源。Dim cat      As New ADOMD.Catalog
Dim cst      As New ADOMD.Cellset
Dim cll      As ADOMD.Cell
cat.ActiveConnection = "Data Source=Servername;" + _
   "Initial Catalog=Bobs Video Store;Provider=msolap;"
cst.Source = "SELECT [Product Category].MEMBERS ON ROWS," + _
                     "[Store State].MEMBERS ON COLUMNS" + _
               "FROM??[Bobs Video Store]" + _
               "WHERE?([Quantity])"
Set cst.ActiveConnection = cat.ActiveConnection
cst.Open
' 使用序号位置检索单元。
Set cll = cst(10)
' 使用轴数值位置检索单元。
Set cll = cst(2,2)
' 使用成员名检索单元。
' MSOLAP 提供者不支持该方法,但是对于支持由成员名
' 访问单元的提供者,该方法可以包括在内。
' Set cll = cst("Childrens", "New York State")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值