private JRFillVariable addVariable(
      JRVariable parentVariable, List variableList, JRFillObjectFactory factory) {
    JRFillVariable variable = factory.getVariable(parentVariable);

    byte calculation = variable.getCalculation();
    switch (calculation) {
      case JRVariable.CALCULATION_AVERAGE:
      case JRVariable.CALCULATION_VARIANCE:
        {
          JRVariable countVar =
              createHelperVariable(parentVariable, "_COUNT", JRVariable.CALCULATION_COUNT);
          JRFillVariable fillCountVar = addVariable(countVar, variableList, factory);
          variable.setHelperVariable(fillCountVar, JRCalculable.HELPER_COUNT);

          JRVariable sumVar =
              createHelperVariable(parentVariable, "_SUM", JRVariable.CALCULATION_SUM);
          JRFillVariable fillSumVar = addVariable(sumVar, variableList, factory);
          variable.setHelperVariable(fillSumVar, JRCalculable.HELPER_SUM);

          break;
        }
      case JRVariable.CALCULATION_STANDARD_DEVIATION:
        {
          JRVariable varianceVar =
              createHelperVariable(parentVariable, "_VARIANCE", JRVariable.CALCULATION_VARIANCE);
          JRFillVariable fillVarianceVar = addVariable(varianceVar, variableList, factory);
          variable.setHelperVariable(fillVarianceVar, JRCalculable.HELPER_VARIANCE);

          break;
        }
      case JRVariable.CALCULATION_DISTINCT_COUNT:
        {
          JRVariable countVar = createDistinctCountHelperVariable(parentVariable);
          JRFillVariable fillCountVar = addVariable(countVar, variableList, factory);
          variable.setHelperVariable(fillCountVar, JRCalculable.HELPER_COUNT);

          break;
        }
    }

    variableList.add(variable);
    return variable;
  }