【发布时间】: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