【问题标题】:Using Assembly in SSAS Named Calculation在 SSAS 命名计算中使用程序集
【发布时间】:2014-05-27 20:38:28
【问题描述】:

我正在使用 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(密钥)、MARKET_CD(密钥)、TOTAL_WIDGETS_SOLD、TOTAL_INVOICES。我想添加一个命名计算 (TOTAL_WIDGETS_SOLD / TOTAL_INVOICES) = AVERAGE_WIDGETS_PER_INVOICE)。

查看每日视图时,某些商店可能没有出售小部件,这就是我需要处理除以零错误的原因。

我尝试添加:

Call MyFirstCube.Mathmatics.GenericDivision(TOTAL_WIDGETS_SOLD, TOTAL_INVOICES)

根据 Microsoft 网站上的示例。

当我这样做时,我得到了错误:

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)

这产生了同样的错误。

然后我删除了类引用:

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'.

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

【问题讨论】:

    标签: c# ssas assemblies bids


    【解决方案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 中使用,只能在独立调用中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多