示例:C 示范性与教育性
创始人
2024-05-07 01:41:17
0

用过SSAS的朋友都使用Visual Studio Business Intelligence Development Studio(BIDS)去创建以及管理所创建的Cube。但是如果只是想查看Cube下的某个角色包含的用户以及权限,我们只能一遍遍的打开BIDS,忍受它的慢动作。更有甚者,如果要比较两个Cube下所有角色及用户是否一致,手工操作更是会让人头大。现在,利用Microsoft提供的AMO对象模型,我们可以很轻松的对Cube进行编程访问,根据自身工作的需求,实在一些有用的工具,以提高工作效率,避免无聊的手工重复劳动。

Analysis Management Objects (AMO) 是SQL Server SSAS的对象模型库,通过它可以方便的对SSAS里的对象进行访问及控制,包括Cube, DataSource, DataSourceView, Partition, Measure, Dimension, Assembly, Role以及Data Mining对象等。要使用它,必须在机器上找到SSAS的安装路径..\Microsoft SQL Server\90\SDK\Assemblies,把目录中的Microsoft.AnalysisServices.Dll文件加载到项目的Reference列表中,AMO对象就是通过这个Dll文件进行访问的。

需要说明的一点是,AMO对象不能用来获取Cube中的数据,如果想要进行数据查询,则需要使用ADOMD.Net (Microsoft.AnalysisServices.AdomdClient).

下面,我们就简要介绍一下如何利用AMO对象来访问Cube。在把Microsoft.AnalysisServices.Dll加载到项目的引用以后,在代码中我们需要引入命名空间:

  1. using Microsoft.AnalysisServices 

在此命名空间下,我们首先引入SSAS的Server对象,并建立连接:

  1. String connectstring = “Data Source = ServerName;Provider=msolap”;  
  2. Server ssasServer = New Server();  
  3. ssasServere.Connect(connectstring); 

与SSAS的服务器实例建立连接以后,我们要取得它的所有Database对象名称:

  1. static public List< string> GetDatabaseCollection()  
  2.     {  
  3.         List< string> collect = new List< string>();  
  4.         foreach (Database db in server.Databases)  
  5.         {  
  6.             collect.Add(db.Name);  
  7.         }  
  8.         return collect;           

请注意,AMO中的Database对象并不是一般意义上的数据库,而是一个容器,可以简单的理解为我们的一个Business Intelligence项目就是一个Database容器,在Database对象内容,包括了BI项目中的所有内容 (Cube, dimension, data mining structure, data source, account, role) 。

接下来,根据所选择的Database来获得它的Cube对象,因为在一个Database下(一个BI项目中),我们可以建立多个Cube,所以在此先取得所有Cube的列表:

  1. static public List< string> GetCubeCollection(string databasename)  
  2. {  
  3.     List< string> collect = new List< string>();  
  4.     database = server.Databases[databasename];  
  5.     foreach (Cube cube in database.Cubes)  
  6.     {  
  7.         collect.Add(cube.Name);  
  8.     }  
  9.     return collect;  

在Cube对象中,我们可以取得CubePermission对象,角色Role就在CubePermission中,从这里就可以获得指定Cube下所有的角色名称列表:

  1. static public List< string> GetCubePermission(string cubename)  
  2.     {  
  3.         List< string> collect = new List< string>();  
  4.         cube = database.Cubes[cubename];  
  5.         foreach (CubePermission cp in cube.CubePermissions)  
  6.         {  
  7.             collect.Add(cp.Role.Name);  
  8.         }  
  9.         return collect;  
  10.     }  

到这里,我们其实就满足了基本需求,可以很轻松地得到Cube下的角色列表,但是不同角色针对Dimension和Attribute其实是拥有不同的访问权限。

  1. foreach (CubeDimensionPermission dp in cp.DimensionPermissions)  
  2. {  
  3.   foreach (AttributePermission ap in dp.AttributePermissions)  
  4.    {  
  5.     Label1.Text = ap.AllowedSet;  
  6.     Label2.Text = ap.DeniedSet;  
  7.     }  

利用CubeDimensionPermission下的AttributePermission对象,我们可以得到当前角色的允许和拒绝的维度属性值,得到了这个值,我们可以直接编程来检查两个Cube中的角色是否一致。

上面只是简单介绍了利用AMO对象进行SSAS服务器对象管理的一个例子,其实大家可以尽情发挥,利用AMO对象实现一些实用的工具来帮忙日常工作中对于SSAS的便捷管理。

附:AMO对象树

AMO对象树 

【编辑推荐】

  1. 学习C#消息:循序渐进
  2. 解惑答疑:C#委托和事件
  3. 学习C#实现HTTP协议:多线程文件传输
  4. 进一步接触C#委托与事件
  5. 浅析四种C#转换的区别

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...