function setupAnalyticalBinding(mParameters, fnODataV2Callback, aAnalyticalInfo,
			sBindingPath, bSkipInitialize, aSorters, aFilters) {
		const oModel = new ODataModelV2(sServiceURL, {
			defaultCountMode : CountMode.Inline,
			tokenHandling: false,
			json: true
		});
		const oBinding = applyAdapterAndCreateBinding(oModel, mParameters, aAnalyticalInfo, sBindingPath,
			aSorters, aFilters);
		if (fnODataV2Callback) {
			oModel.attachMetadataLoaded(function () {
				if (!bSkipInitialize) {
					oBinding.initialize();
				}
				fnODataV2Callback(oBinding, oModel);
			});
			return undefined;
		} else {
			return oModel.metadataLoaded().then(function () {
				if (!bSkipInitialize) {
					oBinding.initialize();
				}
				return oBinding;
			});
		}
	}
Creates an OData V2 model and an analytical binding instance.
If a callback function is given, it is called when the metadata are loaded and the binding is
initialized. If no callback function is given, a Promise is returned that resolves with the
new binding as soon as metadata has been loaded.

@param {object} [mParameters={}]
  The Analytical binding parameters
@param {function} [fnODataV2Callback]
  The function which is called when the metadata is loaded and the binding is initialized
@param {object[]} [aAnalyticalInfo]
  The array of the analytical columns to be used; by default CostCenter (grouped), CostElement (grouped),
  Currency (grouped) and ActualCosts (with total)
@param {string} [sBindingPath="/ActualPlannedCosts(P_ControllingArea='US01',P_CostCenter='100-1000',P_CostCenterTo='999-9999')/Results"]
  The binding path
@param {boolean} [bSkipInitialize=false]
  Whether to skip the binding intialization
@param {sap.ui.model.Sorter[]} [aSorters=[]]
  The array of sorters
@param {sap.ui.model.Filter[]} [aFilters=[]]
  The array of filters
@returns {undefined|Promise}
  <code>undefined</code> if a callback function is given; otherwise a Promise which resolves
  with the new analytial binding instance