Search in sources :

Example 11 with AbstractDoubleCalc

use of mondrian.calc.impl.AbstractDoubleCalc in project mondrian by pentaho.

the class MinMaxFunDef method compileCall.

public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) {
    final ListCalc listCalc = compiler.compileList(call.getArg(0));
    final Calc calc = call.getArgCount() > 1 ? compiler.compileScalar(call.getArg(1), true) : new ValueCalc(call);
    return new AbstractDoubleCalc(call, new Calc[] { listCalc, calc }) {

        public double evaluateDouble(Evaluator evaluator) {
            evaluator.getTiming().markStart(TIMING_NAME);
            final int savepoint = evaluator.savepoint();
            try {
                TupleList memberList = evaluateCurrentList(listCalc, evaluator);
                evaluator.setNonEmpty(false);
                return (Double) (max ? max(evaluator, memberList, calc) : min(evaluator, memberList, calc));
            } finally {
                evaluator.restore(savepoint);
                evaluator.getTiming().markEnd(TIMING_NAME);
            }
        }

        public boolean dependsOn(Hierarchy hierarchy) {
            return anyDependsButFirst(getCalcs(), hierarchy);
        }
    };
}
Also used : ValueCalc(mondrian.calc.impl.ValueCalc) AbstractDoubleCalc(mondrian.calc.impl.AbstractDoubleCalc) ValueCalc(mondrian.calc.impl.ValueCalc) AbstractDoubleCalc(mondrian.calc.impl.AbstractDoubleCalc)

Example 12 with AbstractDoubleCalc

use of mondrian.calc.impl.AbstractDoubleCalc in project mondrian by pentaho.

the class StdevFunDef method compileCall.

public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) {
    final ListCalc listCalc = compiler.compileList(call.getArg(0));
    final Calc calc = call.getArgCount() > 1 ? compiler.compileScalar(call.getArg(1), true) : new ValueCalc(call);
    return new AbstractDoubleCalc(call, new Calc[] { listCalc, calc }) {

        public double evaluateDouble(Evaluator evaluator) {
            TupleList memberList = evaluateCurrentList(listCalc, evaluator);
            final int savepoint = evaluator.savepoint();
            try {
                evaluator.setNonEmpty(false);
                final double stdev = (Double) stdev(evaluator, memberList, calc, false);
                return stdev;
            } finally {
                evaluator.restore(savepoint);
            }
        }

        public boolean dependsOn(Hierarchy hierarchy) {
            return anyDependsButFirst(getCalcs(), hierarchy);
        }
    };
}
Also used : ValueCalc(mondrian.calc.impl.ValueCalc) AbstractDoubleCalc(mondrian.calc.impl.AbstractDoubleCalc) ValueCalc(mondrian.calc.impl.ValueCalc) AbstractDoubleCalc(mondrian.calc.impl.AbstractDoubleCalc)

Aggregations

AbstractDoubleCalc (mondrian.calc.impl.AbstractDoubleCalc)12 ValueCalc (mondrian.calc.impl.ValueCalc)11 PrintWriter (java.io.PrintWriter)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Locale (java.util.Locale)1 BooleanCalc (mondrian.calc.BooleanCalc)1 Calc (mondrian.calc.Calc)1 DimensionCalc (mondrian.calc.DimensionCalc)1 DoubleCalc (mondrian.calc.DoubleCalc)1 ExpCompiler (mondrian.calc.ExpCompiler)1 HierarchyCalc (mondrian.calc.HierarchyCalc)1 IntegerCalc (mondrian.calc.IntegerCalc)1 LevelCalc (mondrian.calc.LevelCalc)1 ListCalc (mondrian.calc.ListCalc)1 MemberCalc (mondrian.calc.MemberCalc)1 StringCalc (mondrian.calc.StringCalc)1 TupleList (mondrian.calc.TupleList)1 AbstractBooleanCalc (mondrian.calc.impl.AbstractBooleanCalc)1 AbstractIntegerCalc (mondrian.calc.impl.AbstractIntegerCalc)1