我正在使用SQL Server 2008 R2和Visual Studio BIDS 2008创建我的第一个多维数据集。我在C#中创建了一个小类来处理除零错误。 (我打算用它来创建我公司使用的各种度量计算。我选择使用一种方法来捕获除以零错误作为概念证据,然后投入太多时间。)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyFirstCube
{
public class Mathmatics
{
public float GenericDivision (int Numerator, int Divisor)
{
if (Divisor == 0)
return 0;
else
return Numerator / Divisor;
}
}
}
我编译了.DLL并添加了对" Assemblies"的引用。 BIDS中的文件夹。
然后我创建了一个数据源视图,其中包含一个具有简单整数计数的表。 DATE_KEY,REGION_CD(Key),MARKET_CD(Key),TOTAL_WIDGETS_SOLD,TOTAL_INVOICES。我想添加一个命名计算(TOTAL_WIDGETS_SOLD / TOTAL_INVOICES)= AVERAGE_WIDGETS_PER_INVOICE)。
在查看每日视图时,某些商店可能没有出售小部件,这就是我需要处理除零错误的原因。
我尝试添加:
Call MyFirstCube.Mathmatics.GenericDivision(TOTAL_WIDGETS_SOLD, TOTAL_INVOICES)
根据微软网站上的例子。
当我这样做时,我收到错误:
Deferred prepare could not be completed.
Statement(s) could not be prepared.
Incorrect syntax near '.'.
首先我尝试添加名称空间参考:
Call MyFirstCube.MyFirstCube.Mathmatics.GenericDivision(TOTAL_WIDGETS_SOLD, TOTAL_INVOICES)
然后我尝试删除命名空间和程序集引用:
Call Mathmatics.GenericDivision(TOTAL_WIDGETS_SOLD, TOTAL_INVOICES)
这产生了同样的错误。
然后我删除了Class Reference:
Call GenericDivision(TOTAL_WIDGETS_SOLD, TOTAL_INVOICES)
这给了我同样的错误,但略有修改:
Deferred prepare could not be completed.
Statement(s) could not be prepared.
Incorrect syntax near 'TOTAL_WIDGETS_SOLD'.
我想我的第一个问题是:我可以在命名计算中使用类库中的方法吗?如果是这样,有人可以帮助我确定我做错了什么吗?
答案 0 :(得分:1)
您编写的函数类型不适合使用call
语法调用它。它应该使用MDX中的函数语法调用,如下所示:
WITH MEMBER Measures.MyDivision AS
Mathmatics.GenericDivision([Measures].[Internet Order Count], [Measures].[Customer Count])
SELECT {[Measures].[Internet Order Count], [Measures].[Customer Count], Measures.MyDivision}
ON COLUMNS
FROM [Adventure Works]
CALL
语法用于返回结果集而不是单个标量值的函数。此类功能不能在MDX中使用,只能在独立调用中使用。