利用.NET扩展MDX存储过程

发表于:2009-7-27 10:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

  SSAS的MDX脚本提供了强大的数据分析查询功能,然而在实际使用中同样会遇到一些问题使得用MDX来表达比较困难,因为MDX并不能提供满足年有数据分析需求的函数,这个时候可以尝试通过基于.NET的存储过程以编程的方式来完成我们特定的功能需求。基于.NET的MDX存储过程支持所有基于.NET平台的编程语言。可以通过创建一个包含所需功能的.NET程序集,然后将这个程序集加载到分析服务器或某个多维数据库中,最后就可以在MDX中引用这个.NET编写的存储过程了。

  CustomAnalysisAssembly

  namespace CustomAnalysisAssembly

  {

  public class SPDemo

  {

  public static double SalesDifference(double firstVal, double secondVal)

  {

  return secondVal - firstVal;

  }

  }

  }

  上面是用C#实现的一个简单Demo存储过程,用于处理两个值的差。上面使用的是一个静态函数来实现具体功能,而实际上静态函数并非唯一的选择,也可以使用非静态的方法。问题在于在MDX中引用非静态方法的时候,可能会造成服务器多次创建同一个对象,造成资源浪费。相反,如果使用静态函数,服务器就不会为其创建实例对象而是直接使用这个静态函数。所以在用.NET编写MDX存储过程的时候推荐使用静态方法实现。

  功能代码完成后进行编译,当把得到的程序集加载到分析服务器或多维数据库后就可以通过MDX来访问这个功能了。如下面的MDX代码就是引用.NET存储过程的方法:

  Code

  SELECT MEMBER [Date].[Diff] AS

  CustomAnalysisAssembly.SPDemo.SalesDifference(

  [Date].[YMD].[Year].&[2009],

  [Date].[YMD].[Year].&[2008]

  )

  SELECT [Date].[Diff] ON COLUMNS

  FROM [AWCube]

  WHERE [Measures].[Internet Sales Amount]

  在引用的时候要注意方法的参数类型,要与方法声明相匹配。在这里这个方法接收的是两个double类型的数据,如果将集合、层次或级别等其它非double的数据类型传递给.NET存储过程会导致MDX错误。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号