【问题标题】:Analysis Services stored procedure performanceAnalysis Services 存储过程性能
【发布时间】:2012-05-09 03:25:18
【问题描述】:

我正在.NET 中编写一个存储过程来执行一些在纯MDX 中无法轻松编写的复杂计算。我遇到的第一个问题是如何以表格形式检索一组数据以传递给我的计算。

到目前为止,我的代码写在下面。我原以为在我们检索到位置 **1 的值之后,我们将在内存中拥有所有数据以进行交互。但是,似乎在位置 **2 处,我们范围内的每一天都会向存储引擎发出一个查询子立方体。这对性能是毁灭性的。

我做错了什么吗?我可以调用另一种方法来一次评估该集​​合吗?

// First get the date range that we'd like to calculate over.
// (These values are constant here for example only)
DateTime date = new DateTime(2012, 4, 1); 
int dateFrom = KeyFromDate(date.AddDays(-360));
int dateTo = KeyFromDate(date);

string dateRange = string.Format(
  "[Date].[Date].&[{0}]:[Date].[Date].&[{1}]", 
  dateFrom, 
  dateTo
);

Expression expression = new Expression(dateRange + "*[Measures].[My Measure]");
MDXValue value = expression.CalculateMdxObject(null); // ***1

foreach (var tuple in value.ToSet().Tuples)
{
  MDXValue tupleValue = MDXValue.FromTuple(tuple).ToInt32(); // ***2
}

【问题讨论】:

  • 您如何连接到您的多维数据集以获取数据?您在使用 ADOMD 吗?如果是这样,您使用的是 ExecuteCellSet、ExecuteXmlReader 还是 somethignelse?
  • 我正在编写一个 Analysis Services 存储过程,并且 Microsoft.AnalysisServices.AdomdServer 命名空间 link 中的 Expression 类连接到多维数据集。 Adomd 不适用于客户端应用程序。

标签: sql-server ssas mdx clrstoredprocedure


【解决方案1】:

运行 SQL Profiler,连接到分析服务,在“事件选择”选项卡上选中“显示所有事件”并选择“从聚合中获取数据”、“从缓存中获取数据”、“查询子程序”和“查询子立方体详细信息” .

首先阅读此文档http://www.microsoft.com/en-us/download/details.aspx?id=17303 - 请参阅第 18 页 - 以了解“查询子立方体详细信息”的工作原理。

然后在调试模式下的 Visual Studio(您正在调试您的过程)中通过第 **1 行 并在 SQL Profiler 中查看详细查询的内容 - 什么度量值组和什么属性。

然后通过 ***2 并在 SQL Profiler 的详细事件中再次查看查询的内容。

我相信属性集是不同的,所以可能会发生这样的情况:在 **1 它使用了一些聚合,而当元组中存在“值”时,**2 - 这组属性没有聚合,因此不是“从聚合中读取”一次,而是多次“从度量组缓存中读取”。

我不能更确切地说,因为我没有你的立方体。尝试通过“查询子多维数据集详细”事件找出这一点,并尝试使用 BIDS Helper 手动创建必要的聚合(具有特定的属性集) - 它可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 2015-03-19
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多