For the complete documentation index, see llms.txt. This page is also available as Markdown.

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?