我想知道向我的多维数据集添加大量计算成员是否会对性能产生影响。一方面,将事物定义一次、集中放置、经过测试并可供任何不支持 MDX 的客户端使用是很好的。另一方面,我添加的其中一些成员可能不会经常使用,因此我可以将它们内联到可能需要它们的一两个报告中。
除了让不必要的成员闲逛的混乱之外,我是否应该尽可能减少计算成员的数量?会增加多维数据集处理时间吗?他们会减慢不使用这些计算成员的查询吗?
计算成员对处理或其他查询几乎没有影响。想添加多少就添加多少!
原因是它们只是在多维数据集上定义,但实际上是在运行时评估的。因此,唯一会减慢或受它们影响的查询是使用它们的查询。由于这个原因,预计他们的返回速度会比本地成员慢一些。
如果经常使用计算成员,请寻找每一个机会,使计算成员成为多维数据集的实际部分。此外,学习并喜欢这种scope
说法。虽然scope
d 的计算成员仍在运行时计算,但该scope
语句为其提供了现成的执行计划,因此它往往更快。我经常会在 DSV 中创建一个成员,然后scope
为我的高容量计算成员创建一个成员。
任何时候你都可以将计算推回关系模型中,这将提高 MDX 查询性能;但也会对处理性能产生负面影响。
如果您可以使用行内 sql 逻辑预先计算一些度量值,那么将这些度量值公开为您的数据源视图中的度量值。存储引擎可以构建聚合,公式引擎要做的工作更少。您基本上是将繁重的工作推到 sql 上。这对于静态计算和转换因子以及简单的算术等事情非常有效。
您可以做的另一件事是创建不应被最终用户用作隐藏的任何中间计算成员,这不会对性能产生任何影响;但会从最终用户的角度整理立方体。