SolveOrder 是可以为维或成员设置的一个元数据属性,用于定义成员的求值顺序。解析顺序是在执行查询过程中应用的。
SolveOrder 可能会影响查询的性能。SolveOrder 属性的值确定成员公式的计算优先级。具有指定解析顺序的成员的公式将按从最低解析顺序值到最高解析顺序值的顺序进行计算。当成员公式依赖另一个动态计算成员的值时,具有公式的成员的解析顺序必须高于它所依赖的动态计算成员的优先级。
表 12-15 默认解析顺序设置
维类型 | 默认的 SolveOrder 值 |
---|---|
存储成员 | 0 |
稀疏维 | 10 |
密集维 - 帐户 | 30 |
密集维 - 时间 | 40 |
密集维 - 两遍帐户 | 60 |
密集维 - 两遍时间 | 70 |
两遍 | 100 |
属性维 | 90 |
如果稀疏成员公式引用具有 ‘DynamicCalc’ 数据存储的密集成员,则该引用会被忽略,因为在默认情况下,会首先计算稀疏维(稀疏帐户的默认 solveOrder 为 10,密集帐户的默认 SolveOrder 为 30)。可以更改此行为,方法是使分配给稀疏维的自定义解析顺序高于密集维的解析顺序。
示例:
请考虑下面的示例,其中的成员具有不同的 SolveOrder 和相应求值方式。
Dimension1:
帐户
A1
A2
比率 – 成员公式 [A1/A2]
Dimension2:
数据源
DataInput
CustomInput
差异 – 成员公式 [DataInput - CustomInput]
请考虑下面的数据集,该数据集表示一月期间的交叉点:
比率和差异具有不同 SolveOrder 的计算
情况 1:比率的 SolveOrder 大于差异的 SolveOrder
在这种情况下,首先计算差异,然后计算相应的比率。
差异的比率将按照 (差异->A1)/(差异->A2) 计算。
情况 2:比率的 SolveOrder 小于差异的 SolveOrder
在这种情况下,首先计算比率,然后计算相应的差异。
比率差异将按照 (比率->DataInput) – (比率->CustomInput) 计算。