Performance
One of the key performance goals for Analyzer is to push as many operations to the database as possible. This is particularly important when querying many high-cardinality dimensions because you want Mondrian to only process the combinations that make sense and not a huge cartesian product which is sparsely populated.
Pay particular attention to the following engine properties:
mondrian.expCache.enable=true
Improves the performance of summary numbers such as ranks and running sums.
mondrian.native.crossjoin.enable=true
This is an essential property which enables pushdown to the database so that Mondrian does not perform large cross joins in memory.
mondrian.native.filter.enable=true
Particularly important for pushdown of Not In and Excludes filters.
mondrian.native.nonempty.enable=true
This should be set to false to optimize Mondrian SQL generation given the MDX patterns generated by Analyzer. Analyzer uses non-empty cross joins to push down joins between high cardinality attributes to the database. If this property is set to false, there are many non-empty cross joins which would get evaluated by Mondrian instead because Mondrian pushes down the individual arguments such as dimension.members.
mondrian.olap.maxConstraints=1000
Used in conjunction with themondrian.native.ExpandNonNative property. This should be set to as large as the underlying database can support.
mondrian.native.ExpandNonNative=true
Allows pushdown of even more cross joins by materializing the cross join inputs into IN lists. For example, a cross join whose inputs are MDX functions can first have their inputs evaluated to members and then convert the cross join into native evaluation.
mondrian.olap.elements.NeedDimensionPrefix=true
Analyzer always generates dimension qualified members so no need to spend time searching for members on different dimensions.
Last updated
Was this helpful?