我正在.NET 中编写一个存储过程来执行一些在纯 MDX 中无法轻松编写的复杂计算。我遇到的第一个问题是如何以表格形式检索一组数据以传递给我的计算。
到目前为止,我的代码写在下面。我会认为,在我们在位置 ** 1 检索我们的值之后,我们将拥有内存中的所有数据进行交互。但是,似乎在 * *2 位置,我们范围内的每一天都会向存储引擎发出一个 Query Subcube。这对性能是毁灭性的。
有什么我做错了吗?我可以调用另一种方法来一次评估集合吗?
// 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
}