The current way that an XmlaOlap4jPreparedstatement populates it's metadata is by executing a statement with the same MDX and stealing the meta data returned by the server. There is bound to be a better and more efficient way of doing this. Executing the statement prior to execution costs a terrible amount of computational time, especially with large CellSets.