Analysis Services存储过程的性能

时间:2012-05-09 03:25:18

标签: sql-server ssas mdx clrstoredprocedure

我正在.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
}

1 个答案:

答案 0 :(得分:0)

运行SQL事件探查器,连接到分析服务,在“事件选择”选项卡上选中“显示所有事件”并选择“从聚合获取数据”,“从缓存中获取数据”,“查询子容器”和“查询子多维数据集详细信息” 。

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

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

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

我认为属性集是不同的,所以它可能会发生在** 1中它使用一些聚合,并且当元组中存在“value”时就位* * 2 - 这组属性没有聚合,因此,一旦“多次从度量组缓存中读取”,就不要进行“读取聚合”。

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