利用.NET扩展MDX存储过程

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

ContractedBlock.gif ExpandedBlockStart.gif 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存储过程的方法:  

ContractedBlock.gif ExpandedBlockStart.gif 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错误。

转载于:https://www.cnblogs.com/SmartBizSoft/archive/2009/05/26/1490397.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值