Concealed measures are available from Atoti Server 6.2.3.
What is a concealed measure?
A data cube normally sends all its measures to the query cubes of its application. It can instead conceal some of them. A concealed measure stays fully computable on the data cube, but it is never sent to the query cubes, so a query cube can neither query it nor compute anything from it. A concealed measure will not appear in the list of queryable measures in any UI. Concealing measures is independent of concealing hierarchies or branches. A data cube can use any combination of the three. See Recommendations.How to conceal measures
Measures are concealed with the optionalwithConcealedMeasures step of the data cluster definition builder, available after withAllHierarchies() or withConcealedBranches(). It takes the measure names, or a Collection<String> of them. Calling it again replaces the measures concealed so far.
IDataClusterDefinition#setConcealedMeasures(Collection<String>). The concealed names are read back with IDataClusterDefinition#getConcealedMeasures().
Depending on a concealed measure as underlying measure
A query cube never receives a concealed measure. A measure that is not concealed but has a concealed measure among its underlying measures cannot be computed there. It must be a post-processor whose execution is disabled in the query cube, as described in How to force the execution in the data cube. Otherwise, the data cube fails at startup with aDescriptionException that names the measure. With Copper, call CopperPostProcessor#disableExecutionInQueryCube():
delay.v1 fails at startup when it defines the following calculation:
delay as an underlying measure, or any other measure with no concealed underlying measure, has no such constraint. It is computed on the query cube like any other measure of a distributed application.
Which limits apply?
- A native measure, such as
contributors.COUNTorupdate.TIMESTAMP, cannot be concealed: naming one fails with aDescriptionException. Every query cube defines its own native measures and requests them from every data cube. - Every data cube of an application must conceal the same measures. All data cubes of an application must use the same measure definitions, as described in Scalability, and a concealed measure is not sent to the query cubes.
- Concealing a measure that the data cube does not define has no effect, apart from a warning in the logs. Check the logs for a misspelled measure name.
- A measure defined on a query cube cannot use a concealed measure: the query cube does not expose it.
- Atoti finds the measures that use a concealed measure through their underlying measures. A post-processor that reads a concealed measure without listing it among its underlying measures is not detected. Disable its execution in the query cube explicitly.