public override void UpdateMeasures(U cell, MeasureValuesCollection <T> measures, CellContext <T> context)
            {
                MolapCell <T> mcell = (MolapCell <T>)(object) cell;

                foreach (var previousValue in mcell.Values)
                {
                    context.UpdateOldValue(previousValue.Key, previousValue.Value);
                }

                mcell.IncrementOcurrences();

                foreach (KeyValuePair <T, object> item in measures)
                {
                    if (item.Value != null)
                    {
                        ValueType nvalue = (ValueType)item.Value;

                        if (mcell.Values.ContainsKey(item.Key))
                        {
                            Type      measuretype = this._measures[item.Key].DataType;
                            ValueType ovalue      = mcell.Values[item.Key];
                            var       functor     = GetMeasureAggregationFunction(measuretype);

                            if (functor != null)
                            {
                                context.UpdateNewValue(item.Key, nvalue);
                                mcell.Values[item.Key] = this.Add(ovalue, nvalue, functor);
                            }
                        }
                        else
                        {
                            context.UpdateNewValue(item.Key, nvalue);
                            mcell.Values.Add(item.Key, nvalue);
                        }
                    }
                }
            }
            public override void UpdateMetrics(U cell, CellContext <T> context)
            {
                MolapCell <T> mcell = (MolapCell <T>)(object) cell;

                foreach (var item in _metrics)
                {
                    object nvalue = null;

                    try
                    {
                        context.CurrentMetric = item.ID;
                        nvalue = item.MetricExpression.Evaluate(context);
                    }
                    catch (Exception ex)
                    {
                        //to do logging error and error behavior
                        Console.WriteLine(ex.Message);
                    }

                    if (nvalue != null)
                    {
                        if (mcell.Values.ContainsKey(item.ID))
                        {
                            mcell.Values[item.ID] = (ValueType)nvalue;
                        }
                        else
                        {
                            mcell.Values.Add(item.ID, (ValueType)nvalue);
                        }
                    }
                    else
                    {
                        mcell.Values.Remove(item.ID);
                    }
                }
            }