汇编在SSAS命名计算中的应用

本文关键字:应用 计算 SSAS 汇编 | 更新日期: 2023-09-27 18:05:40

我正在使用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,并在BIDS中添加了对"Assemblies"文件夹的引用。

然后,我创建了一个数据源视图,其中包含一个具有简单整数计数的表。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'.

我想我的第一个问题是:我可以使用方法从类库命名计算?如果有,有人能帮我找出我做错了什么吗?

汇编在SSAS命名计算中的应用

您编写的函数类型不适合使用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中使用,只能在独立调用中使用。