public interface Calc
Calc
is the base class for all calculable expressions.
Exp
).
Calc
).
<Member>.CurrentMember
function) are made
explicit in the physical language.
ExpCompiler
). There are often more than one evaluation strategy
for a given expression, and compilation process gives us an opportunity to
choose the optimal one.
Calc
interface has sub-interfaces for various types:
IntegerCalc
,
BooleanCalc
,
DoubleCalc
,
StringCalc
are scalar expressions;
MemberCalc
,
LevelCalc
,
HierarchyCalc
,
DimensionCalc
yield elements of the OLAP model.
Each of these sub-interfaces has an abstract implementation:
AbstractIntegerCalc
,
AbstractBooleanCalc
,
AbstractDoubleCalc
,
AbstractStringCalc
,
AbstractMemberCalc
,
AbstractLevelCalc
,
AbstractHierarchyCalc
,
AbstractDimensionCalc
.
GenericCalc
is an adapter which implements all of these interfaces
and will try to convert any given result to the correct type. Use it
sparingly: if you know the expected result type, it is better to write a
class which implements a specific TypeCalc
interface.Modifier and Type | Method and Description |
---|---|
void |
accept(CalcWriter calcWriter)
Prints this expression, by accepting a visiting
CalcWriter . |
boolean |
dependsOn(Hierarchy hierarchy)
Returns whether this expression depends upon a given hierarchy.
|
Object |
evaluate(Evaluator evaluator)
Evaluates this expression.
|
ResultStyle |
getResultStyle()
Returns style in which the result of evaluating this expression is
returned.
|
Type |
getType()
Returns the type of this expression.
|
boolean |
isWrapperFor(Class<?> iface) |
<T> T |
unwrap(Class<T> iface) |
Object evaluate(Evaluator evaluator)
evaluator
- Provides dimensional context in which to evaluate
this expressionboolean dependsOn(Hierarchy hierarchy)
If it does not depend on the hierarchy, then re-evaluating the expression with a different member of this context must produce the same answer.
Some examples:[Measures].[Unit Sales]
depends on all dimensions except [Measures]
.
([Measures].[Unit Sales],
[Time].[1997]) > 1000
depends on all hierarchies except [Measures] and [Time].
Filter([Store].[USA].Children,
[Measures].[Unit Sales] < 50)
depends upon all hierarchies except [Store] and [Measures].
How so? Normally the scalar expression would depend upon all hierarchies
except [Measures], but the Filter
function sets the [Store]
context before evaluating the scalar expression, so it is not inherited
from the surrounding context.
hierarchy
- HierarchyType getType()
void accept(CalcWriter calcWriter)
CalcWriter
.calcWriter
- WriterResultStyle getResultStyle()
One application of this method is for the compiler to figure out whether the compiled expression is returning a mutable list. If a mutable list is required, the compiler can create a mutable copy.
boolean isWrapperFor(Class<?> iface)
<T> T unwrap(Class<T> iface)
Copyright © 2019 Hitachi Vantara. All rights reserved.