| 1 10 package mondrian.olap.fun; 11 12 import mondrian.calc.Calc; 13 import mondrian.calc.ExpCompiler; 14 import mondrian.calc.HierarchyCalc; 15 import mondrian.calc.impl.AbstractDimensionCalc; 16 import mondrian.mdx.ResolvedFunCall; 17 import mondrian.olap.Exp; 18 import mondrian.olap.Dimension; 19 import mondrian.olap.Evaluator; 20 import mondrian.olap.Hierarchy; 21 22 29 public class HierarchyDimensionFunDef extends FunDefBase { 30 static final HierarchyDimensionFunDef instance = new HierarchyDimensionFunDef(); 31 32 private HierarchyDimensionFunDef() { 33 super("Dimension", "<Hierarchy>.Dimension", 34 "Returns the dimension that contains a specified hierarchy.", 35 "pdh"); 36 } 37 38 public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) { 39 final HierarchyCalc hierarchyCalc = 40 compiler.compileHierarchy(call.getArg(0)); 41 return new CalcImpl(call, hierarchyCalc); 42 } 43 44 public static class CalcImpl extends AbstractDimensionCalc { 45 private final HierarchyCalc hierarchyCalc; 46 47 public CalcImpl(Exp exp, HierarchyCalc hierarchyCalc) { 48 super(exp, new Calc[] {hierarchyCalc}); 49 this.hierarchyCalc = hierarchyCalc; 50 } 51 52 public Dimension evaluateDimension(Evaluator evaluator) { 53 Hierarchy hierarchy = 54 hierarchyCalc.evaluateHierarchy(evaluator); 55 return hierarchy.getDimension(); 56 } 57 } 58 } 59 60 | Popular Tags |