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?