Sql server Analysis Services存储过程性能

Sql server Analysis Services存储过程性能,sql-server,ssas,mdx,clrstoredprocedure,Sql Server,Ssas,Mdx,Clrstoredprocedure,我正在.NET中编写一个存储过程,以执行一些在纯MDX中无法轻松编写的复杂计算。我遇到的第一个问题是如何以表格形式检索一组数据以传递给我的计算 到目前为止,我的代码写在下面。我原以为,在我们检索到**1位置的值后,内存中的所有数据都可以与之交互。但是,在位置**2处,似乎每天都会向存储引擎发出一个查询子多维数据集。这对性能是毁灭性的 我做错什么了吗?我是否可以调用另一种方法来一次性计算集合 // First get the date range that we'd like to calcula

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

运行SQL事件探查器,连接到analysis services,在“事件选择”选项卡上选中“显示所有事件”,然后选择“从聚集获取数据”、“从缓存获取数据”、“查询子多维数据集”和“查询子多维数据集详细”

首先阅读本文档(参见第18页),了解查询子多维数据集详细信息的工作原理

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

然后通过***2,在详细事件中的SQL事件探查器中再次查看查询的内容

我认为属性集是不同的,因此可能会在**1中使用一些聚合,而在**2中,当值存在于元组中时-这组属性没有聚合,因此在多次从度量值组缓存中读取时,不进行从聚合中读取


我不能说得更准确,因为我没有你的立方体。请尝试通过查询子多维数据集详细事件来找到这一点,并尝试使用BIDS帮助器使用特定属性集手动创建必要的聚合-这可能会有所帮助。

运行SQL Profiler,连接到analysis services,在选项卡事件选择上选中“显示所有事件”,然后选择“从聚集获取数据”、“从缓存获取数据”,查询子多维数据集和查询子多维数据集详细

首先阅读本文档(参见第18页),了解查询子多维数据集详细信息的工作原理

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

然后通过***2,在详细事件中的SQL事件探查器中再次查看查询的内容

我认为属性集是不同的,因此可能会在**1中使用一些聚合,而在**2中,当值存在于元组中时-这组属性没有聚合,因此在多次从度量值组缓存中读取时,不进行从聚合中读取


我不能说得更准确,因为我没有你的立方体。请尝试通过查询子多维数据集详细事件来了解这一点,并尝试使用BIDS Helper使用特定属性集手动创建必要的聚合-这可能会有所帮助。

您如何连接到多维数据集以获取数据?你在用ADOMD吗?如果是,您是在使用ExecuteCellSet、ExecuteXmlReader还是其他东西?我正在编写Analysis Services存储过程,Microsoft.AnalysisServices.AdomdServer命名空间中的表达式类连接到多维数据集。Adomd不适用,因为它用于客户端应用。您如何连接到多维数据集以获取数据?你在用ADOMD吗?如果是,您是在使用ExecuteCellSet、ExecuteXmlReader还是其他东西?我正在编写Analysis Services存储过程,Microsoft.AnalysisServices.AdomdServer命名空间中的表达式类连接到多维数据集。Adomd不适用,因为它用于客户端应用程序。